版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/87867273
并发
并行(parallel): 同一时刻,有多条指令在多个处理器上同时执行.
并发(concurrency): 同一时刻,只有一条指令执行,但多个进程被快速的轮换执行.宏观上是多个进程同时执行,微观上不是同时执行的.
- 程序:一个公司 进程:一个程序可以有多个进程 。项目
- 线程:进程系统资源消耗过多 ,cpu的基本执行单位,一个进程有多个线程。小组
- 协程:一个线程有多个协程。个人
- go程:用GO语言实现的协程-goroutine
进程并发
进程并发时会出现的问题?
问题一.系统开销比较大,占用资源比较多,开启进程数量比较少。
问题二. 在unix/linux系统下,还会产生“孤儿进程”和“僵尸进程”
线程并发
**线程同步:**线程按照预定的先后次序进行运行。
实现线程同步的方法(加锁)
互斥锁:每个线程在操作资源时给资源加互斥锁,操作完解锁。谁拿到锁谁执行,拿不到锁的阻塞。
读写锁:读写锁允许更高的并行性。其特性为:写独占,读共享。当既有读又有写的时候写锁优先。读写锁适合于对数据读的次数远大于写的情况
协程并发
协程最大的优势在于“轻量级”。可以轻松创建上万个而不会导致系统资源衰竭。而线程和进程通常很难超过1万个。一个线程中可以有任意多个协程。在协程中,调用一个任务就像调用一个函数一样,消耗的系统资源最少,但能达到进程、线程并发相同的效果。
函数层面的并发
Go并发
Go在语言级别支持协程,也就是说通过Go的语法就支持协程。