请问多线程的同步和串行有什么区别

问题描述

请问多线程的同步和串行有什么区别

如果一段代码被锁住执行完再去执行另一段代码,这和顺序执行有什么区别呢,求各位大神解答啊

解决方案

没错,同步的代码,从本质上说,相当于串行(非并发)执行。

解决方案二:

多线程只有同步和异步之分,没有同步和串行。
串行一般只代码一行行有序执行。至于同步异步实际不关心。

解决方案三:

我的意思是如果同步了,不就跟顺序执行一个意思了么,执行完一个块再执行另一个块,那这样的话多线程的同步实际上没有实现并发啊,这个时候的多线程是为了什么呢

解决方案四:

其实多线程你可以看做是几条执行程序的执行过程的,多线程是用来处理一些需要相对同时解决问题的问题的。

解决方案五:

同步是指多个线程访问同一个资源时防止两个线程交错执行引发数据异常
比如Windows下就可以用事件对象,互斥体,自旋锁,信号灯,快速互斥体(快速互斥体限驱动程序专用)来进行线程同步。
线程同步本质上就是让在一个线程运行时其他线程等待(挂起或自旋),当线程完成后,其他线程被激活,因为现代操作系统是多任务抢占式的系统,系统可能随时进行上下文切换,因此线程同步显得非常重要。
至于串行,打个比方,某个设备只能支持同时接收线路上的一个请求,那么就需要设备的驱动程序实现串行化,把请求添加到一个处理队列中,先来先处理,一个个处理。
PS:同步和串行是两个概念,同步和异步相对,串行与并行相对,二者没有绝对的关系

解决方案六:

http://blog.csdn.net/rfjian123/article/details/9289999

解决方案七:

看得出来,楼主对于并发和多线程的一些概念理解上和大家有些出入,而且缺乏实际的经验。
这里打个比方,借用超市运货来说明:
有一家超市要把货搬到仓库里,可以选择一个人来搬货(**单线程**)或者多叫几个人来搬货(**多线程**)。很显然在这里并发提升了效率。
继续深入这个场景,假设有些货物需要搬到地下的仓库,需要通过电梯运输。但是电梯的容量有限,如果电梯走了,其他使用电梯的人就必须等待。
这里电梯可以看作一个**受限的资源**或者**同步区域**。在这里等待是必须的,所以这里的矛盾就是需要使用的资源是有限的。
再来看一下操作系统对于CPU的调度:
假设一个单核的CPU,只能运行一个线程,但是现在有多个线程要运行,怎么办?你可以让CPU在不同的线程之间切换,每个线程只准运行一小段时间。
只要切换的速度够快,给人的感觉就好像是在同时运行多个线程。那么在这里线程切换的意义就在于提升交互体验。

解决方案八:

线程同步本来就是为了控制两段在不同线程中执行顺序。一般是event等事件来控制这个流程
还有一种就是不关心执行顺序,只关心两个线程不能同时访问,这个就是就是加锁互斥。

多线程同步就是可以只把某些代码做先后顺序控制,但是其它代码没有控制的就可以多个线程同时执行。这个不象单线程永远都是顺序的

解决方案九:

对于同步区域的访问,多个线程相当于是串行执行的(谁先获得访问的权限,谁先去执行)

但是,这个与传统的串行程序是不一样的。这里串行的区间只是“同步区域”,而并非整个程序。

解决方案十:

顺序执行是单线程从上往下执行代码,而一段代码被锁住是指这段代码锁在一个线程上,此线程是顺序执行,其他线程不能在解锁前执行,这是防止线程竞争同一个资源

时间: 2016-06-30
Tags: 多线程

请问多线程的同步和串行有什么区别的相关文章

ZooKeeper客户端事件串行化处理

为了提升系统的性能,进一步提高系统的吞吐能力,最近公司很多系统都在进行异步化改造.在异步化改造的过程中,肯定会比以前碰到更多的多线程问题,上周就碰到ZooKeeper客户端异步化过程中的一个死锁问题,这里说明下. 通常ZooKeeper对于同一个API,提供了同步和异步两种调用方式. 同步接口很容易理解,使用方法如下: ZooKeeper zk = new ZooKeeper(...); List children = zk.getChildren( path, true ); 异步接口就相对复

在JAVA端使Oracle存储过程串行地执行

我们知道给资源上锁可以使我们串行化地访问资源,oracle为plsql开发人员提供了DBMS_SQL包用来管理USERL LOCK锁资源.这种锁可以使得多个session串行的执行某个存储过程,还可以用来排他的访问某个外部设备或服务,甚至可以检测事务的提交或回滚(提交或回滚时锁的释放). 有人说我在java端调用db的存储过程,可以使用synchronized lock来串行的调用存储过程.那就不需要db lock呢?因为当java端应用服务器down的时候,存储过程已经在执行了,但是可能ora

GCD之并行串行区别

1.用户自定义线程队列,创建时很容易创建 注意创建时的第一个参数:标记值,方便调试查看 dispatch_queue_t serialqueue=dispatch_queue_create("serialqueue", DISPATCH_QUEUE_SERIAL);//串行线程队列 dispatch_queue_t concurrentqueue=dispatch_queue_create("concurrent", DISPATCH_QUEUE_CONCURREN

串口通讯-有关串行口通讯的流程图

问题描述 有关串行口通讯的流程图 "基于ARM的的一维条码数据采集的设计与实现"这个是我的毕设题目,写论文时需要画一个流程图,是关于串口通讯处理流程图,里面含计数.显示.中断什么的,请问这个流程图怎么画啊??

设计具有相同属性任务串行有序执行的线程池

问题描述 我有一个这样的线程池的场景,相信很多人都遇到过:1,每个用户都可以添加多个任务:2,有很多的用户和很多的任务:3,每个用户添加的任务必须有序串行执行,即在同一时刻不能有同时执行一个用户的两个任务:4,实时性:只要线程池线程有空闲的,那么用户提交任务后必须立即执行:尽可能提高线程的利用率.表示一个用户可以用一个唯一的字符串.我已经开发出了一套基本满足上述要求的线程池,现在抛砖引玉,看看广大网友有没有更好的方案. 问题补充:我写了个论坛主题,并附上我的实现:http://www.iteye

xml串行化读入和存储数组

问题描述 XmlSerializer:xml串行化读入和存储数据时,怎么对数组进行操作.e.g.classOprator{publicOprator(}{AllPos=newPos[5];for()...//实例化Serializer时,数组保存后,名称都是Pos.当再次读取的时候就不能正确读取.<Pos><p><X>0</X><Y>0</Y></p></Pos><Pos><p><

axis2客户端无法实现并发只能是串行,不知道怎么并发实现请指教

问题描述 publicclassTestStub3implementsRunnable{publicstaticLoggerlogger=Logger.getLogger(TestStub3.class);privatestaticConfigurationContextctx=null;privatestaticResourceBundlerb=ResourceBundle.getBundle("usif");static{try{ctx=ConfigurationContextFa

XML串行化数据基础

xml|数据 XML文档使用越来越普遍,我们常会把一些系统设置等文件用config或XML文档存文在程序目录下..Net的串行化数据是一个很令人心动的技术,可以很方便地读取一定格式或保存成文件.下面做个简单了练习,对XML串行化作些初步了解.(注:我是在WINDOWS应用程序上做的练习,因怕建立ASP.NETA工程麻烦,下面一大堆东西.其实除了路径外,程序写法基本一致). 先编写一个需要串行化的类,该类是设置一个操作权限的设置文件 using System; namespace Hellosea

XML串行化数据的基础

xml|数据 XML文档使用越来越普遍,我们常会把一些系统设置等文件用config或XML文档存文在程序目录下..Net的串行化数据是一个很令人心动的技术,可以很方便地读取一定格式或保存成文件.下面做个简单了练习,对XML串行化作些初步了解.(注:我是在WINDOWS应用程序上做的练习,因怕建立ASP.NETA工程麻烦,下面一大堆东西.其实除了路径外,程序写法基本一致). 先编写一个需要串行化的类,该类是设置一个操作权限的设置文件 using System; namespace Hellosea