`
fujohnwang
  • 浏览: 156491 次
社区版块
存档分类
最新评论

并发控制总是必需的吗?

    博客分类:
  • Tech
阅读更多
免责声明: 以下观点只是一个人在特定阶段,特定场景下的胡言乱语,如有错误,并且存在误导,这个人不对此承担任何责任。

 

 

当我们初次踏入Java的世界,初次学习线程的时候,有没有想过为什么要有这个东西?为什么我写了那么些年程序,好像根本就没有更多的使用到它那?

当JSR166随着Java5的发布而姗姗来迟的时候,为什么我们对它依然那么的一往情深?没有它,我们之前不也一样活吗?

当我们阅读过林林总总的讲并发编程理论和实践的书籍之后, 《JAVA并发编程实践 》 [1 ] 也好,《Java并发编程—设计原则与模式》 [2 ] 也好, 这些书里的那些理论的本质是什么,它们又是不是放之四海而皆准那?

所有有关并发的介绍和理论,都是建立在什么东西的基础之上?如果我们仅仅局限在并发控制的世界之中(并非只是指Java的并发), 会不会有些“偏听则暗 ”之忧哪?

我们为什么需要并发控制?它能够帮助我们提高数据的处理速度,充分运用CPU? 或许这是一个方面,或者是表象,使用并发控制,最主要的一个原因,个人觉得,就是需要维护某个“共享 ”的数据状态的完整性。 也就是说,是否存在共享的数据状态,决定着我们是否需要引入并发控制。

  • 如果存在共享的数据状态,并且,又有多个“ ”(Thread)要对这一共享的数据状态进行更新操作, 那么,为了保证其状态的完整性和正确性,我们就必须引入并发控制; 反之,如果这些“ ”(Thread)仅仅只是读这一共享的数据状态,没有任何的更新操作,那并发的引入则是没有必要的。

  • 如果没有共享的数据状态,通常意味着每个人(线程)有自己的数据拷贝,那么,你爱怎么折腾怎么折腾,引入并发控制一点儿意义都没有。

从某个角度来说,并发控制可以分为两种:

  • 乐观型策略.  这种策略通常应用在并发性不是很高,并发强度为中低档水平的时候,比如STM(Software Transaction Memory)或者CAS(Compare and Swap/Compare and Set)这些理念或者实现方式。

  • 悲观型策略.  这种策略通常应用在高并发性场合,因为这种情况下,这种策略要比乐观型策略获得更好的效果。像Lock和Synchronization就属于这种情况。

实际上,你完全可以用数据库的乐观锁和悲观锁来类比并推演出这两种策略。

既然并发控制的存在是因为存在共享的数据状态,那么避免甚至移除这些共享的数据状态是不是就意味着能够避免并发,甚至前进到并行处理的世界那? More or less, I think.

当提到Thread confinement的时候,或者更具体一些,提到ThreadLocal的时候, 我们是不是马上就能想到,它不就是通过为每个人(线程)分配不同的数据拷贝而避免了并发控制嘛! Erlang的书买了还没看,不过,他的share-nothing的理念不正是他能够在并行处理的世界里自由驰骋的保证吗?

share something, or share nothing, 这才是并发存在与否的前提,不是吗?

P.S. 并发与并行计算绝对不是我这么几句闲扯就能囊括过来的,哪位要是有兴趣可以从其它角度来阐述这个问题(比如硬件的角度),俺们都洗耳恭听中,呵呵



[1 ] 英文名《Java Concurrency in Practice》

[2 ] 英文名《Concurrent Programming in Java Design Principles and Patterns》

分享到:
评论
4 楼 fujohnwang 2009-05-09  
mercyblitz 写道
不太理解你的写作的意图。

并且并发提供利用率,需求决定的,这个帖子的题目有点。。。

任何东西都有利弊嘛。


不理解就对了,因为本来就没有铺开来说。

mercyblitz 写道


并且并发提供利用率,需求决定的,


你所谓的提供利用率,一定需要并发吗?呵呵
3 楼 mercyblitz 2009-05-08  
不太理解你的写作的意图。

并且并发提供利用率,需求决定的,这个帖子的题目有点。。。

任何东西都有利弊嘛。
2 楼 fujohnwang 2009-04-14  
gembler 写道
LZ.........你看看那排版


OK,那只是个楔子先放在那里,现在才有时间补上内容,check it now
1 楼 gembler 2009-04-14  
LZ.........你看看那排版

相关推荐

    实验17事务与并发控制.pdf

    【事务与并发控制】是数据库管理系统中的核心概念,主要涉及数据的一致性和完整性。本实验旨在让学生深入理解数据库事务的基本概念、四大特性以及如何在SQL Server中进行事务管理。 1. **事务的概念**:事务是...

    基于java高并发BGW仿真系统的实现.pdf

    在文档“基于java高并发BGW仿真系统的实现....到关键技术、信息通信架构,再到高并发技术的应用和试验结果,以及Java技术在仿真系统中的应用,都是深入理解“基于java高并发BGW仿真系统的实现.pdf”文档内容所必需的。

    并发编程常见问题总结(持续更新...).pdf

    并发编程是计算机科学中多...通过上述的详细解释,可以看出并发编程是一个复杂的领域,涉及到多线程的创建、启动、控制以及线程安全等多方面的知识。掌握这些知识对于设计和开发高性能、稳定的应用系统是非常必要的。

    数据库系统概论(第五版)PPT第11章.ppt

    总的来说,第11章详细介绍了并发控制的各个方面,从概念到实际应用,包括各种问题及其解决方案,这些都是理解和设计高效、可靠的数据库系统所必需的知识。并发控制是数据库系统性能的关键因素,确保了在多用户环境下...

    chapter14 实践习题1

    例如,两阶段锁定(2PL)、多版本并发控制(MVCC)和乐观并发控制(OCC)等协议都是为了确保事务间的正确交互和系统的高并发性能。 综上所述,这些习题涵盖了数据库事务的基本原理,包括其在文件系统中的应用、ACID...

    肝硬化并发肝性脑病.doc

    肝硬化并发肝性脑病是一种严重的临床状况,主要发生在患有慢性肝脏疾病的患者中,尤其是肝硬化患者。肝性脑病是由于肝脏功能严重受损导致毒素(如氨)在血液中积累,进而影响大脑功能,表现为神经精神症状。下面将...

    易语言远程控制类

    同时,多线程技术也是必需的,因为控制端和服务端可能需要并发地处理多个任务,如同时处理多个控制请求。此外,为了提高用户体验,优化性能和减少延迟也是远程控制系统设计时需要考虑的问题。 总的来说,易语言远程...

    《远程控制编程技术》源代码

    5. **多线程与并发**:在处理多个远程连接时,多线程或多进程技术是必需的。每个连接可以在单独的线程中运行,确保不会因一个操作阻塞其他操作。 6. **权限管理**:远程控制可能需要在不同级别的权限下执行操作,...

    Go + Vue的管理系统脚手架, 前后端分离, 仅包含项目开发必需部分, 基于角色访问控制 分包合理, 精简易于扩展

    它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如...

    java实现多线程的网络并发服务器.pdf

    在阅读了提供的文件内容之后,可以从中提炼出以下关于Java实现多线程网络并发服务器的关键知识点: 1. Java网络编程基础 - Java提供了一套用于...这些知识点对理解Java网络编程模型及多线程并发控制有着重要的意义。

    C# 32路继电器控制源码

    3. **多线程编程**:由于可能需要同时控制32个继电器,多线程编程是必需的。C#提供了System.Threading命名空间,可以创建线程、线程同步和线程间通信。 4. **事件驱动编程**:在用户界面中,当用户触发某些操作...

    VC++ 远程桌面控制程序

    2. **多线程**:远程桌面控制涉及到并发处理,可能需要同时处理用户的输入和服务器的响应,因此多线程编程是必需的。 3. **数据编码与解码**:RDP协议涉及复杂的屏幕更新和输入事件编码,开发者需要理解这些过程并...

    界面豪华的纯VB远程控制 服务端

    - **多线程**:处理并发连接时,多线程技术是必需的,以确保服务器能够同时处理多个客户端请求。 - **安全性**:通过加密技术保护数据的安全,防止未经授权的访问和窃听。 - **事件驱动编程**:VB的事件驱动模型使得...

    基于单片机的小型全地形履带车控制系统设计.pdf

    文章最后提到的减速电机参数表详细列出了电机的一些基本参数,如电压、功率、减速比、额定扭矩和额定转速等,这些参数是实现精确控制履带车所必需的。 综上所述,该篇文档详细介绍了如何设计一款适用于全地形环境的...

    远程控制软件源代码

    6. **并发与多线程**:在处理多个连接时,多线程或多进程编程是必需的,以确保程序的响应性和效率。了解如何正确管理和同步线程是非常重要的。 7. **权限管理**:在企业环境中,远程控制可能需要基于角色的访问控制...

    大数据量和高并发的数据库SQL优化

    ### 大数据量和高并发下的数据库SQL优化 #### 数据库结构的设计 1. **合理的数据库模型设计**: - **重要性**:一个合理的数据库模型不仅能够简化客户端及服务器端程序的开发与维护,还能显著提升系统运行时的...

    Java远程控制源代码包

    6. **多线程**:远程控制应用通常需要处理多个并发连接,因此多线程编程是必需的。Java的Thread类和ExecutorService接口提供了丰富的工具来管理并发任务。 7. **异常处理**:在网络环境中,错误和异常是常态。良好...

    Concurrent.Programming.in.Java - Design.Principles.and.Patterns(Second.Edition)

    ## 二、并发控制机制详解 ### 2.1 排他性:确保数据一致性 #### 2.1.1 排他性的概念 排他性是指通过阻止并发活动之间的不希望发生的干扰来保持对象状态的一致性。这一节讨论了如何使用`synchronized`方法等技术来...

Global site tag (gtag.js) - Google Analytics