请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于进程和线程

老师我一直困惑两个问题,有空麻烦老师帮解答下,十分感谢!

  1. 一个进程中包含多个线程,操作系统调度的真实情况是 【只要一个线程上cpu了,它所在的进程的状态就该为运行中]】 还是 【进程上cpu了,它里面的线程谁能执行就占cpu执行】,说实话我感觉这两个基本概念我理解的还是不太好,,
  2. 我们什么时候使用多线程编程,什么时候使用多进程通信呢? 线程间同步我写过一点demo的例子,进程间通信 比如共享内存 互斥量啥的 我们开发中真的会用到吗?

正在回答 回答被采纳积分+3

2回答

提问者 sadcloud 2020-08-14 10:00:08

老师你说的多进程为了充分利用cpu是什么意思,是不是改为多线程编程是为了更充分利用cpu更好些呢? 因为我理解我们编写一个程序的时候 由程序员控制的是线程吧,比如在new Thread执行任务啥的

0 回复 有任何疑惑可以回复我~
  • 比如nginx早期版本,就是典型的,多个worker其实是多个进程,这些进程里面没有多线程。一般worker数量少于核数,就有核会闲置。
    回复 有任何疑惑可以回复我~ 2020-08-16 17:30:26
  • 一个进程中的线程可以不在一个核心上运行,通常多线程都会负载均衡到各个核心,java还提供了能力指定核心。redis的早期版本也是需要启动多个实例,因为没有线程。
    回复 有任何疑惑可以回复我~ 2020-08-16 17:32:54
求老仙 2020-08-14 08:25:46

问题问的很不错。 


  1.   操作系统负责资源的调度,至于具体资源分配到进程还是线程,其实都可以,看具体实现。 一般操作系统用户空间CPU分配只做到进程,线程的资源是进程自己在调度。 所以线程如果申请文件、内存,其实都是进程在申请。 如果是这种设计,那么操作系统只知道进程在执行,CPU反正给进程了, 里面哪个线程在执行操作系统就不管了。 当发生切换的时候,操作系统直接触发中断,进程就停止了,线程也跟着停止了。 

2. 生产者、消费者是多线程中非常场见的一个模型,比如说请求不断从接收的线程进来,然后被多个工作线程处理。这样设计是因为你希望工作是并发的,比如有10个任务,其中一个阻塞了,那9个还能完成。如果串行工作,那么第一个阻塞了,后面的跟着阻塞。多进程的一个场景是为了利用满CPU,比如你有16个核,那你有可能启动15个进程,将CPU利用起来,留一个给操作系统。


3. 进程间通信现在直接用工具比较多,比如直接用redis,mq。 多线程编程到了一定段位之后就是高频使用,比如你要对接别人的服务,你就要考虑这些东西,提高吞吐量。 

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信