同步异步

操作系统发展到今天已经十分精巧,线程就是其中一个杰作。操作系统把 CPU 处理时间划分成许多短暂时间片,在时间 T1 执行一个线程的指令,到时间 T2又执行下一线程的指令,各线程轮流执行,结果好象是所有线程在并肩前进。这样,编程时可以创建多个线程,在同一期间执行,各线程可以“并行”完成不同的任务。
单线程方式下,计算机是一台严格意义上的冯·诺依曼式机器,一段代码调用另一段代码时,只能采用同步调用,必须等待这段代码执行完返回结果后,调用方才能继续往下执行。有了多线程的支持,可以采用异步调用,调用方和被调方可以属于两个不同的线程,调用方启动被调方线程后,不等对方返回结果就继续执行后续代码。被调方执行完毕后,通过某种手段通知调用方:结果已经出来,请酌情处理。
计算机中有些处理比较耗时。调用这种处理代码时,调用方如果站在那里苦苦等待,会严重影响程序性能。例如,某个程序启动后如果需要打开文件读出其中的数 据,再根据这些数据进行一系列初始化处理,程序主窗口将迟迟不能显示,让用户感到这个程序怎么等半天也不出来,太差劲了。借助异步调用可以把问题轻松化 解:把整个初始化处理放进一个单独线程,主线程启 动此线程后接着往下走,让主窗口瞬间显示出来。等用户盯着窗口犯呆时,初始化处理就在背后悄悄完成了。程序开始稳定运行以后,还可以继续使用这种技巧改善 人机交互的瞬时反应。用户点击鼠标时,所激发的操作如果较费时,再点击鼠标将不会立即反应,整个程序显得很沉重。借助异步调用处理费时的操作,让主线程随时恭候下一条消息,用户点击鼠标时感到轻松快捷,肯定会对软件产生好感。

From http://en.wikipedia.org/wiki/Thread_(computing)

In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by an operating system scheduler. A thread is a light-weight process. The implementation of threads and processes differs from one operating system to another, but in most cases, a thread is contained inside a process. Multiple threads can exist within the same process and share resources such as memory, while different processes do not share these resources. In particular, the threads of a process share the latter's instructions (its code) and its context (the values that its variables reference at any given moment).

On a single processor, multithreading generally occurs by time-division multiplexing (as inmultitasking): the processor switches between different threads. This context switching generally happens frequently enough that the user perceives the threads or tasks as running at the same time. On amultiprocessor or multi-core system, threads can be truly concurrent, with every processor or core executing a separate thread simultaneously.

Many modern operating systems directly support both time-sliced and multiprocessor threading with a process scheduler. The kernel of an operating system allows programmers to manipulate threads via thesystem call interface. Some implementations are called a kernel thread, whereas a lightweight process(LWP) is a specific type of kernel thread that shares the same state and information.


转载于http://blog.csdn.net/a_snail/article/details/1491790

同步

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像早上起床 后,先洗涮,然后才能吃饭,不能在洗涮没有完成时,就开始吃饭.按照这个定义,其实绝大多数函数都是同步调用(例如sin,isdigit等)。但是一般 而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。最常见的例子就是
SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理完毕以后,该函数才把消息处理函数所返回的
LRESULT值返回给调用者。

异步

异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
以CAsycSocket类为例(注意,CSocket从CAsyncSocket派生,但是起功能已经由异步转化为同步),当一个客户端通过调用
Connect函数发出一个连接请求后,调用者线程立刻可以朝下运行。当连接真正建立起来以后,socket底层会发送一个消息通知该对象。
这里
提到执行部件和调用者通过三种途径返回结果:状态、通知和回调。可以使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不受调用者控制。


转载于http://blog.csdn.net/lizhiguo0532/article/details/6117818

进程并发运行的环境中,多个进程之间存在如下竞争和合作的关系:

-          进程中的资源争用(间接作用)

当并发进程竞争使用同一个资源时,它们之间就会发生冲突。为了避免冲突,当一个进程获得资源时,另一个进程必须等待。这种情况需要通过互斥机制来解决。

-          进程间通过共享的合作(间接作用)

一个进程等待另一个进程的执行,并以另一个进程的执行结果作为本进程的执行条件,就形成了同步机制

-          进程间通过通信的合作(直接作用)

进程间还可以通过通信进行合作,同性提供了同步和协调各种活动的方法。如操作系统提供的通信功能。

 

进程间通过共享的竞争:

特点:

1.       每个进程不知道其他进程的存在

2.       两个或者和更多的进程在各自的执行过程中需要访问相同的资源(IO设备、存储器、CPU)

3.       进程之间没有信息交互

相互间产生的影响:

       执行结果不会受影响

       执行时间会受影响

竞争引发的控制问题:

       互斥、死锁、饥饿

 

与并发相关的术语:

临界资源:一次只能允许一个进程访问的资源

临界区:访问和操作临界资源的代码段

互斥:多个进程需要访问一个临界资源时,任何时刻只能有一个进程正在访问;通俗点,资

源需要排它使用,防止出现竞争冲突(不同时使用,但无先后次序)

同步:指两个事件的发生存在着某种时序上的先后关系。

死锁:一组进程中,每个进程都无限等待改组进程中另一进程所占有的临界资源

饥饿:一组进程中,某个或者某些进程无限等待改组中其他进程所占有的临界资源

转载于http://blog.csdn.net/zevin/article/details/8779009

 

posted @ 2015-11-06 23:26  quantumcs  阅读(652)  评论(0编辑  收藏  举报