进程、线程和协程

论坛 期权论坛     
匿名小用户   2019-10-20 17:47   26   0
<h1>一、进程</h1>
<h2>1、多任务原理</h2>
<p><span style="font-size:18px;">  多任务是指操作系统同时可以运行多个任务。</span></p>
<blockquote>
<ul><li><span style="font-size:18px;">单核CPU实现多任务原理:操作系统轮流让各个任务交替执行;</span></li>
<li><span style="font-size:18px;">多核CPU实现多任务原理:真正的执行多任务只能在多核CPU上实现,多出来的任务轮流调度到每个核心上执行。</span></li>
</ul></blockquote>
<blockquote>
<ul><li><span style="font-size:18px;">并发:看上去一起执行,任务数多于CPU核心数;</span></li>
<li><span style="font-size:18px;">并行:真正的一起执行,任务数小于等于CPU核心数。</span></li>
</ul></blockquote>
<p><span style="font-size:18px;">  实现多任务的方式:</span><br><span style="font-size:18px;">    1、多进程模式</span><br><span style="font-size:18px;">    2、多线程模式</span><br><span style="font-size:18px;">    3、协程模式</span><br><span style="font-size:18px;">    4、多进程+多线程模式</span></p>
<h2>2、进程</h2>
<p><span style="font-size:18px;">  对于操作系统而言,一个任务就是一个进程;</span></p>
<p><span style="font-size:18px;">  进程是系统中程序执行和资源分配的基本单元,每个进程都有自己的数据段、代码段、堆栈段。</span></p>
<hr><p></p>
<p><span style="font-size:18px;">  下面是一小段程序,一个单任务的例子。在其中,有两个输出语句分别在在两个不同的循环当中,单任务的执行方式,也就是最初学习时,当一个循环没有结束的时候,无法执行到下面的程序当中。如果想要让两个循环可以同时在执行,就是在实现多任务,当然不是说同时输出,而是两个循环都在执行着。</span></p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="font-size:16px;"><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">from</span> time <span style="color:#0000ff;">import</span><span style="color:#000000;"> sleep
</span><span style="color:#008080;"> 2</span> <span style="color:#008000;">#</span><span style="color:#008000;"> 只能执行到那一个循环,执行不了run,所以叫单任务</span>
<span style="color:#008080;"> 3</span> <span style="color:#0000ff;">def</span><span style="color:#000000;"> run():
</span><span style="color:#008080;"> 4</span>     <span style="color:#0000ff;">while</span><span style="color:#000000;"> True:
</span><span style="color:#008080;"> 5</span>         <span style="color:#0000ff;">print</span>(<span style="color:#800000;">"</span><span style="color:#800000;">&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;</span><span style="color:#800000;">"</span><span style="color:#000000;">)
</span><span style="color:#008080;"> 6</span>         sleep(1.2<span style="color:#000000;">)
</span><span style="color:#008080;"> 7</span>
<span style="color:#008080;"> 8</span> <span style="color:#0000ff;">if</span> <span style="color:#800080;">__name__</span> == <span style="color:#800000;">"</span><span style="color:#800000;">__main__</span><span style="color:#800000;">"</span><span style="color:#000000;">:
</span><span style="color:#008080;"> 9</span>     <span style="color:#0000ff;">while</span><span style="color:#000000;"> True:
</span><span style="color:#008080;">10</span>         <span style="color:#0000ff;">print</span>(<span style="color:#800000;">"</span><span style="color:#800000;">**********</span><span style="color:#800000;">"</span><span style="color:#000000;">)
</span><span style="color:#008080;">11</span>         sleep(1<span style="color:#000000;">)
</span><span style="color:#008080;">12</span>     run()</span></pre>
</div>
<p><span style="font-size:18px;">  接下来启用多任务,通过进程来实现。</span></p>
<p><span style="font-size:18px;">  multiprocessing库:跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象(fork仅适用于Linux)。</span></p>
<p><span style="font-size:18px;">  下面的程序是在一个父进程中创建一个子进程,让父进程和子进程可以都在执行,创建方式程序中已经很简洁了。可以自己把这两段程序复制下来运行一下,看看输出的效果。</span></p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="font-size:16px;"><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">from</span> multiprocessing <span style="color:#0000ff;">import</span><span style="color:#000000;"> Process
</span><span style="color:#008080;"> 2</span> <span style="color:#0000ff;">from</span> time <span style="color:#0000ff;">import</span><span style="color:#000000;"> sleep
</span><span style="color:#008080;"> 3</span> <span style="color:#0000ff;">import</span><span style="color:#000000;"> os
</span><span style="color:#008080;"> 4</span>
<span style="color:#008080;"> 5</span> <span style="color:#0000ff;">def</span><span style="color:#000000;"> run(str):
</span><span style="color:#008080;"> 6</span>     <span style="color:#008000;">#</span><span style="color:#008000;"> os.getpid()获取当前进程id号</span>
<span style="color:#008080;"> 7</span>     <span style="color:#008000;">#</sp
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:50
帖子:1079
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP