问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是多线程,多进程?

发布网友 发布时间:2022-04-23 12:59

我来回答

5个回答

懂视网 时间:2022-05-11 06:29


我感觉你括号里那句“因为 Java直接调用的操作系统的多线程接口处理的”好像并不是 Python 和 Java 在多线程上存在差异的原因,你去翻下 Python 源码的 Thread.h 以及相关的一串头文件就会发现,Python 中的线程在 Linux 上是调用了 pthread_create(),在 Windows上是调用了 CreateThread(),都是根正苗红的原生线程

真正导致差异的,其实就是你一开始提到的 GIL,这个跟是不是“直接调用操作系统的多线程接口”没啥关系。其实 Python 的 GIL 只在 CPython 这个实现中存在,Jython 是没有的,Ruby 的 MRI 实现也有 GIL,而 JRuby 就没有 GIL

Python 源码中的 ceval.c 文件有 GIL 刷存在感的现场,比如第 256 行至第 290 行如下所示
void
PyEval_AcquireLock(void)
{
 PyThread_acquire_lock(interpreter_lock, 1);
}

void
PyEval_ReleaseLock(void)
{
 PyThread_release_lock(interpreter_lock);
}

void
PyEval_AcquireThread(PyThreadState *tstate)
{
 if (tstate == NULL)
 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
 /* Check someone has called PyEval_InitThreads() to create the lock */
 assert(interpreter_lock);
 PyThread_acquire_lock(interpreter_lock, 1);
 if (PyThreadState_Swap(tstate) != NULL)
 Py_FatalError(
  "PyEval_AcquireThread: non-NULL old thread state");
}

void
PyEval_ReleaseThread(PyThreadState *tstate)
{
 if (tstate == NULL)
 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
 if (PyThreadState_Swap(NULL) != tstate)
 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
 PyThread_release_lock(interpreter_lock);
}
GIL这个东西,跟实现有关。java的每一个对象都继承了object类的六个方法,其中包括wait和notify.如果cpython也这么干,就没gil了。实际上,鸟叔曾搞出过这样的python版本,但是由于单线程性能急剧下降,大家不乐意又换成Gil版本了。 多线程难道不是等io用么→_→
以及这玩意主要看实现是怎么实现的
python也有多进程啊(*/ω\*) 第一个问题是的,python无法利用多核是因为其运行时,虚拟机解析器,是单线程的。(估计一开始就设计成这个样子),于是任意个时刻虚拟机能运行上下文只有一份,也只在处理一份python虚拟机指令。多线程其实是假的,通过GIL锁住了运行上下文状态,切换上下文来模拟多线程

进程这个,和语言无关,和操作系统有关。多进程就是利用操作系统功能创建的进程而已,不是在同一个程序中。 有些语言可以调用操作系统API,最直接

热心网友 时间:2022-05-11 03:37

1、多线程:是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。

在一个程序中,这些独立运行的程序片段叫作“线程”,利用它编程的概念就叫作“多线程处理”。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

2、多进程:Windows 应用程序中消息有两种送出途径;直接和排队。Windows或某些运行的应用程序可直接发布消息给窗口过程,或者,消息可送到消息列象连续不断轮询消息队列的OS中当前执行的每个进程都 事件驱动程序不是由事件的顺序来控制,而是由事件的发生来控,而事件的发生是随机的、不确定的,这就允许程序的用户用各种合理的顺序来安排程序的流程。

扩展资料:

多线程优点:

1、使用线程可以把占据时间长的程序中的任务放到后台去处理

2、用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

3、程序的运行速度可能加快

4、在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。

5、多线程技术在IOS软件开发中也有举足轻重的位置。

参考资料来源:

百度百科-多线程

百度百科-多进程

热心网友 时间:2022-05-11 04:55

进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。

线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。

线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。

扩展资料:

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

如果多线程的方案会复制所有软件可见的状态,包括特许的控制登录、TLB 等,那就能够让虚拟机去创造各式线程。这样子就允许在相同的处理器中每个线程跑各自的操作系统。

换句话说,如果只有存储了用户模式的状态,就能够让相同的裸晶大小的芯片在一段时间内处理更多的线程。

Windows 应用程序中消息有两种送出途径;直接和排队。Windows或某些运行的应用程序可直接发布消息给窗口过程,消息可送到消息列象连续不断轮询消息队列的OS中当前执行的每个进程都 事件驱动程序不是由事件的顺序来控制。

而是由事件的发生来控,而事件的发生是随机的、不确定的,这就允许程序的用户用各种合理的顺序来安排程序的流程。

参考资料来源:百度百科-多进程

参考资料来源:百度百科-多线程

热心网友 时间:2022-05-11 06:30

■什么是多线程:

多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。

使用线程的好处有以下几点:

·使用线程可以把占据长时间的程序中的任务放到后台去处理

·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度

·程序的运行速度可能加快

·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较游泳了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

====

■什么是多进程:

进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程。进程是操作系统进行资源分配的单位。
在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。
在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。 多任务带来的好处是明显的,比如你可以边听mp3边上网,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。那么这里就涉及到并行的问题,俗话说,一心不能二用,这对计算机也一样,原则上一个CPU只能分配给一个进程,以便运行这个进程。我们通常使用的计算机中只有一个CPU,也就是说只有一颗心,要让它一心多用,同时运行多个进程,就必须使用并发技术。实现并发技术相当复杂,最容易理解的是“时间片轮转进程调度算法”,它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。
如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。
在Windows中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这时情况更加复杂,但简单地说,有如下关系:

总线程数<= CPU数量:并行运行

总线程数> CPU数量:并发运行

并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。

这里涉及到多任务操作系统的问题,多任务操作系统(如Windows)的基本原理是:操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,因此在我们看来,就好像是多个进程在同时执行,这样就实现了多任务.Whoops,真绕口.追问进程和线程它们之间有什么区别?

追答简单的说,你每启动一个程序,就启动了一个进程。在Windows 3.x下,进程是最小运行单位。在Windows 95/NT下,每个进程还可以启动几个线程,比如每下载一个文件可以单独开一个线程。在Windows 95/NT下,线程是最小单位。WINDOWS的多任务特性使得线程之间独立运行,但是它们彼此共享虚拟空间,也就是共用变量,线程有可能会同时操作一片内存。

热心网友 时间:2022-05-11 08:21

多线程是嵌入式LINUX里面的,多进程是EDA里面的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
招商银行公司治理 高等教育学高等教育学的高校 上海在职考研 纸嫁衣2奘铃村无法播放广告 不能看广告解决方法 纸嫁衣5好玩吗 详细游戏分析 纸嫁衣2要钱吗 是免费游戏还是付费游戏 活杀的鲫鱼如何保鲜 我想把XP换成win7的系统,有没有详细的教程以及应注意哪些? 我现在是XP... 小腿肌肉没劲怎么回事 为什么建议要多吃新鲜蔬菜水果补充人体所需矿物质呢? C#.NET中什么是进程?什么是线程?进程和线程有什么区别? 经常听到进程与线程?这是什么东西? 什么是计算机线程?进程和线程两者有什么区别? 本田brv是合资车吗 广汽本田brv什么时候上市 本田urv什么时间上市?本田CRV新款什么时候上市? 本田brv什么时候上市 买车提本田BRV好不好 本田brvsuv有五座的吗 brv本田什么时候上市? 本田brv什么时候上市多少钱 本田brv为什么不在中国上市 本田hrv什么时候在中国上市? 鸡蛋清可以去除黑头? 如何获得鸡蛋清而不要鸡蛋黄 裤子上的鸡蛋清怎么洗下去? 如何分离蛋清和蛋黄 书本上的鸡蛋清怎么去除 鸡蛋清洒在桌子上干了怎么去掉 车上有鸡蛋清怎么去除 Java进程和线程有什么区别? 进程和线程的区别和linux运行状态查看简单介绍 进程和程序的本质区别是( )。 请问在windows中的进程、线程和在linux中的进程、线程有什么区别? 在windows中的进程、线程和在linux中的进程、线程有什么区别? 这是?老司机来解答 aysnctask和线程的区别 linux 嵌入式 系统中 进程和线程 什么区别???跪求 一定采纳 C 怎么能把单反相机搞废掉,还不让发现是我弄坏的? 佳能数码相机镜头快门组件怎么会损坏 如何弄坏一台数码相机,刚买的,想退掉! 我的相机是佳能的这两天借别人不知道别人怎么弄坏了弄得前面的摄像头出不来 如何弄坏数码相机(sony nikon canon) 佳能相机一拆封卡槽就坏了,我没*,不是我弄坏的,机器两年前出厂的,怎么办? 佳能单反相机主板损坏的问题 佳能数码相机被摔坏了吗?我的 canon数码相机摔坏了 佳能相机坏了怎么办? 佳能相机 个别照片数据损坏 无法删除怎么办 单反相机佳能(500D)USB误接手机充电器会损坏相机吗