关于进程和线程
来源:9-4 线程——轻量级的进程

sadcloud
2020-08-13
老师我一直困惑两个问题,有空麻烦老师帮解答下,十分感谢!
- 一个进程中包含多个线程,操作系统调度的真实情况是 【只要一个线程上cpu了,它所在的进程的状态就该为运行中]】 还是 【进程上cpu了,它里面的线程谁能执行就占cpu执行】,说实话我感觉这两个基本概念我理解的还是不太好,,
- 我们什么时候使用多线程编程,什么时候使用多进程通信呢? 线程间同步我写过一点demo的例子,进程间通信 比如共享内存 互斥量啥的 我们开发中真的会用到吗?
写回答
2回答
-
sadcloud
提问者
2020-08-14
老师你说的多进程为了充分利用cpu是什么意思,是不是改为多线程编程是为了更充分利用cpu更好些呢? 因为我理解我们编写一个程序的时候 由程序员控制的是线程吧,比如在new Thread执行任务啥的
022020-08-16 -
求老仙
2020-08-14
问题问的很不错。
操作系统负责资源的调度,至于具体资源分配到进程还是线程,其实都可以,看具体实现。 一般操作系统用户空间CPU分配只做到进程,线程的资源是进程自己在调度。 所以线程如果申请文件、内存,其实都是进程在申请。 如果是这种设计,那么操作系统只知道进程在执行,CPU反正给进程了, 里面哪个线程在执行操作系统就不管了。 当发生切换的时候,操作系统直接触发中断,进程就停止了,线程也跟着停止了。
2. 生产者、消费者是多线程中非常场见的一个模型,比如说请求不断从接收的线程进来,然后被多个工作线程处理。这样设计是因为你希望工作是并发的,比如有10个任务,其中一个阻塞了,那9个还能完成。如果串行工作,那么第一个阻塞了,后面的跟着阻塞。多进程的一个场景是为了利用满CPU,比如你有16个核,那你有可能启动15个进程,将CPU利用起来,留一个给操作系统。
3. 进程间通信现在直接用工具比较多,比如直接用redis,mq。 多线程编程到了一定段位之后就是高频使用,比如你要对接别人的服务,你就要考虑这些东西,提高吞吐量。
00
相似问题