什么时候需要用多进程而不是多线程
答案:2 悬赏:0
解决时间 2021-04-08 15:03
- 提问者网友:芷芹
- 2021-04-07 15:36
什么时候需要用多进程而不是多线程
最佳答案
- 二级知识专家网友:都不是誰的誰
- 2021-04-07 16:39
就算一段函数被加了同步锁 它也是可以被多个线程同时调用的 只是在多个线程之间会做一个CPU占用的协调 当一个线程调用完毕后 线程池中的其它线程才会通过这个函数
根据lock使用的对象不同 锁的作用域也不同 所以会出现LZ所说的 同时只能被一个线程调用
不知道LZ的目的和问题是什么 是在多线程调用时出错了 还是有特殊的需求 如果的确是要在不同的程序下调用dll 那不如每个程序都配置一份单独的dll来的更实在 因为考虑到dll之所以会只允许单线程调用 那么就意味着这个dll中有一些静态变量应用 同步调用时可能就会涉及到变量的使用冲突 所以建议先把那个dll搞明白 再想下一步该怎么去做
LZ没有提出是用什么语言编写程序 不同的语言在处理时也有各种区别
根据lock使用的对象不同 锁的作用域也不同 所以会出现LZ所说的 同时只能被一个线程调用
不知道LZ的目的和问题是什么 是在多线程调用时出错了 还是有特殊的需求 如果的确是要在不同的程序下调用dll 那不如每个程序都配置一份单独的dll来的更实在 因为考虑到dll之所以会只允许单线程调用 那么就意味着这个dll中有一些静态变量应用 同步调用时可能就会涉及到变量的使用冲突 所以建议先把那个dll搞明白 再想下一步该怎么去做
LZ没有提出是用什么语言编写程序 不同的语言在处理时也有各种区别
全部回答
- 1楼网友:啵啵桃汀
- 2021-04-07 17:09
■什么是多线程:
多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。
使用线程的好处有以下几点:
·使用线程可以把占据长时间的程序中的任务放到后台去处理
·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
·程序的运行速度可能加快
·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较游泳了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
====
■什么是多进程:
进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。
在windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。 多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。那么这里就涉及到并行的问题,俗话说,一心不能二用,这对计算机也一样,原则上一个cpu只能分配给一个进程,以便运行这个进程。我们通常使用的计算机中只有一个cpu,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用cpu,每个进程允许占用cpu的时间非常短(比如10毫秒),这样用户根本感觉不出来cpu是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有cpu。
如果一台计算机有多个cpu,情况就不同了,如果进程数小于cpu数,则不同的进程可以分配给不同的cpu来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于cpu数,则仍然需要使用并发技术。
在windows中,进行cpu分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:
总线程数<= cpu数量:并行运行
总线程数> cpu数量:并发运行
并行运行的效率显然高于并发运行,所以在多cpu的计算机中,多任务的效率比较高。但是,如果在多cpu计算机中只运行一个进程(线程),就不能发挥多cpu的优势。
这里涉及到多任务操作系统的问题,多任务操作系统(如windows)的基本原理是:操作系统将cpu的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务.whoops,真绕口.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯