进程

对进程和线程一个形象的比喻

天大地大妈咪最大 提交于 2019-12-01 02:28:52
进程和线程是计算机领域的重要概念,还记得当年上操作系统课时,老师让我们每个人写一篇文章谈谈对两者的认识、 我觉得通过一个形象的比喻来解释两者的区别,可能效果会更好。 如果火车站开放一个窗口售票,只能一个个处理买票人的请求,这时候就好比是一种“单线程”形式,这样的效率其实是很低的。 但更好的方式是开放多个窗口,同时进行售票,效率就会提升很多了。这就好比是一种“多线程”形式。 那么,可以得出结论:一般情况下,多线程的处理速度要高于单线程。 现在我们站在更高的角度来看这个问题,一个火车站,就好比一个“进程”,它包含了多个“线程”。 那么,多个火车站同时售票,就还比有了多个“进程”。进程和线程是一种很简单的关系,进程包含了线程。 如果把火车站比作进程,那售票窗口就是线程。 再来分析一下。多线程一定比单线程效率高吗?并不是绝对的。 其实还要考虑一个因素,那就是系统资源。每开启一个线程,都需要消耗一定的系统资源,而单线程是独享系统资源,单位时间内吞吐速度更快。 举个例子,当前流行的缓存系统Memcache和Redis,前者是多线程模型,后者是单线程模型。可是在性能测试时,Redis并没有表现的比Memcache差。 这其中的原因,很值得思考。 来源: oschina 链接: https://my.oschina.net/u/243742/blog/521172

Linux内核学习之三-进程的调度

你说的曾经没有我的故事 提交于 2019-11-30 20:04:09
一、调度的总体流程 进程的调度是进程部分的核心-很显然,如果没有调度,我们也不需要进程了!我们在上一篇文章的第二部分实现了一个最简单的按照时间片的调度算法,每个进程都平均执行100毫秒。 while (true){ processing = nextProcessing(); processing.run(); wait(100); //每100毫秒分片 processing.interrupt(); } 那么Linux中如何实现的呢?我们先来看流程。调度相关的代码都在 sched.c 中。这个就是Linux代码核心中的核心,它被运行在亿万台机器上,每台机器每个时钟周期就要执行一次,看到它是不是有点激动?终于知道“高性能的底层代码”长什么样了! 这个文件的核心函数是 asmlinkage void __sched schedule(void) ,这就是调度部分的具体代码。当我读完并注释之后才发现已经有很多注释版本了,比如这篇文章: http://blog.csdn.net/zhoudaxia/article/details/7375836 ,所以就不贴代码了。我注释后的代码在 sched.c (4079行开始)里。不过不读源码,不用那些关键词去搜索,估计也找不到一些好文章,这也是一个学习的过程吧。 这个方法有两个重要的点,一个是 pick_next_task(rq);

Linux进程线程初探(概念)

自古美人都是妖i 提交于 2019-11-30 10:43:51
多任务操作系统下通常有3个基本概念: 任务、进程、线程。 任务 :任务是一个逻辑概念,是为实现某一目的的一些列操作。一次任务可激发多个进程,这些进程相互合作来完成目标。 进程 :指一个具有功能的程序在某个数据集合上的一次动态执行过程,它是操作系统进行资源分配和调度的基本单元。 进程和程序的区别:程序是一段静态的代码,是保存在ROM上的指令和数据的集合,没有任何执行的概念;而进程是一个动态的概念,它是程序的一次执行过程,它包括了动态创建、调度、执行和消亡的整个过程。 线程 :进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段、堆栈段,所以进程切换的操作对系统的开销较大。为了提高效率,操作系统引入了线程,也称为轻量级进程。 线程可以对进程的内存空间和资源访问,并与同一进程中的其他线程共享。因此,线程的切换开销比进程小的多。一个进程可以拥有多个线程,其中每个线程共享该进程所拥有的资源和地址空间,因此,任何线程对系统资源的操作都会给其他的线程带来影响,所以应注意多线程中的同步。 那么进程到底拥有那些资源呢,系统又是怎么对进程进行资源分配和调度的呢? 进程的产生 :系统首先在新的地址空间里创建进程、读入可执行文件、最后开始执行。系统在一开始就会初始化一个进程,叫做init(),在Linux中进程的创建依赖于函数fork(),fork(

Python3学习笔记11-标准库之子进程、信号、多线程、进程信息

别等时光非礼了梦想. 提交于 2019-11-28 23:56:57
关于进程与线程的简单理解(以工厂举例:cup-》工厂,车间-》进程,线程-》工人),可以参考阮一峰的博文 进程与线程的一个简单图文解释 一、子进程 (subprocess包) 这里的内容以Linux进程基础和Linux文本流为基础。 subprocess包 主要功能是 执行外部的命令和程序 。比如说,我需要使用wget下载文件。我在Python中调用wget程序。从这个意义上来说,subprocess的功能与shell类似。 1、subprocess以及常用的封装函数 当我们 运行python 的时候,我们都是在 创建并运行一个进程 。 一个进程 可以 fork 一个子进程,并让这个 子进程exec另外一个程序 。在Python中,我们通过标准库中的 subprocess包 来 fork一个子进程,并运行一个外部的程序 。 subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用。另外subprocess还提供了一些管理**标准流(standard stream) 和 管道(pipe)**的工具,从而在进程间使用文本通信。 使用subprocess包中的函数创建子进程的时候,要注意: 在创建子进程之后,父进程是否暂停,并等待子进程运行。 函数返回什么 当returncode不为0时,父进程如何处理。 ###(1)