计算机操作系统 学习笔记 并发和并行 线程和进程

学习内容:https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E6%9C%AC%E7%89%B9%E5%BE%81

个人笔记:
并发:从线程的角度讲,有多个任务同时要执行,即使只有一个CPU核心,通过时间片切分也能同时执行多个任务,给人在同时执行的感觉。
并行:多个核心同时执行多个任务

https://www.cnblogs.com/bughui/p/7422214.html
举个我们开发中会遇到的例子,我们说资源请求并发数达到了1万。这里的意思是有1万个请求同时过来了。但是这里很明显不可能真正的同时去处理这1万个请求的吧!如果这台机器的处理器有4个核心,不考虑超线程,那么我们认为同时会有4个线程在跑。也就是说,并发访问数是1万,而底层真实的并行处理的请求数是4。如果并发数小一些只有4的话,又或者你的机器牛逼有1万个核心,那并发在这里和并行一个效果。也就是说,并发可以是虚拟的同时执行,也可以是真的同时执行。而并行的意思是真的同时执行。

进程:资源分配的基本单位
线程:CPU分配的基本单位

之前在看线程协程的博客的时候https://www.cnblogs.com/lxmhhy/p/6041001.html下的这句话
一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
引起了我的困扰,提出了题目的问题。Java运行时难道只能利用单核CPU吗 。单个CPU在同一时间只能执行单进程,也只能执行单线程,因为时间片的轮转让我们觉得能同时运行多个进程或者线程。那一个进程的多个线程是如何利用多核CPU的。这个网址给出了很好的回答。https://www.v2ex.com/t/285551

对于 CPU 而言,看到的是线程,多核 CPU 可以同时调度多个线程执行。
我想楼主可能不是很理解线程的意义把。一个进程有多个线程的好处:对于单核 CPU 而言,
CPU每次只能调度 1 个线程,但是若当前线程阻塞了,
 CPU 可以不必等待,而是先调用别的线程执行,这样就提高了 CPU 的利用率
“你认为” 和 “大家认为” 怎么样并没有用,不如多看看书。 
最早 UNIX 的调度是以 “进程” 为最小调度单位,那个时候还没有线程的概念。
线程有两种,一种是 “用户态线程” ,对内核不可见,内核不可以调度,现在一般叫做纤程或协程。
另一种是 “内核态线程”,由内核调度,也称作轻量进程 LWP 。现在说的线程,一般不特殊指定,都是内核线程。 
能不能利用多核的关键是能不能被内核调度,既然内核态线程可以被调度,自然可以利用多核。 
另外只要资源足够(内存) CPU 可以 hold 住任意多的进程或线程,
这与 CPU 的核数无关。你在这里指的应该是 “运行” 。

猜你喜欢

转载自blog.csdn.net/qq_31617121/article/details/80870296