自己总结一下
- 对于操作系统来说,线程是最小的执行单元,而进程则是最小的资源管理单元。
- 协程,一种比线程更加轻量级的存在,一个进程可以有多个线程,而一个线程里面也可以有多个协程。(注:协程是被程序所管理)
- 管程 就是城管 资源管理程序共同构成的一个操作系统的资源管理模块,把对该共享数据结构实施的操作定义为一组过程
线程与进程
- 进程就是一个应用程序的启动。它包括至少一个线程,数据,代码,地址空间和打开的文件。
- 那线程呢?线程属于进程的一部分,它在进程里面有单独的栈空间,它是程序的实际执行者,对于进程来说,线程可以减少调度的成本,线程的切换不会引起进程的切换。 对于操作系统来说,线程是最小的执行单元,而进程则是最小的资源管理单元。(注:进程和线程都是被操作系统所管理)
协程
- 协程,一种比线程更加轻量级的存在,可以这样说,一个进程可以有多个线程,而一个线程里面也可以有多个协程。(注:协程是被程序所管理),因为协程的暂停完全由程序控制,线程的阻塞状态是由操作系统内核来进行切换。所以说协程性能得到了很大的提升,不会像线程切换那样消耗资源,协程的开销远远小于线程的开销。
它的应用: 1.Lua语言(Lua从5.0版本开始使用协程,通过扩展库coroutine来实现 2.Python语言(在python 3.5以后,async/await 成为了更好的替代方案) 3.Go语言(Go语言对协程的实现非常强大而简洁,可以轻松创建成百上千个协程并发执行) 4.Java语言
管程
- 管程就是代表共享资源的数据结构以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成的一个操作系统的资源管理模块。
- 比如一次只允许一个进程访问的资源或者多个进程只能互斥访问的资源,该访问需要同步操作,比如信号量就是一种方便有效的进程同步机制。但信号量的方式要求每个访问临界资源的进程都具有wait和signal操作。这样使大量的同步操作分散在各个进程中,不仅给系统管理带来了麻烦,而且会因同步操作的使用不当导致死锁。管程就是为了解决这样的问题而产生的。
- 管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
- 操作系统中管理的各种软件和硬件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对该资源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节。利用共享数据结构抽象地表示系统中的共享资源。而把对该共享数据结构实施的操作定义为一组过程,如资源的请求和释放过程request和release。进程对共享资源的申请、释放和其他操作,都是通过这组过程对共享数据结构的操作来实现的,这组过程还可以根据资源的情况接受或阻塞进程的访问,确保每次仅有一个进程使用该共享资源,这样就可以统一管理对共享资源的所有访问,实现临界资源互斥访问。
- 管程就是这样被请求和释放临界资源的进程所调用。