多线程与多进程

多线程与多进程

多线程与进程

进程(Process)

是计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配
和调度的基本单位,是操作系统结构的基础。

线程(Thread)

有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最
小单位。线程是进程中的一个实体,是被系统独立调度和分配的基本单位,
一个进程可以包含多个线程,但是线程不能包含多个进程。线程自己不拥有
系统资源,在单个程序中同时运行多个线程完成不同的工作,称为多线程。

线程与进程的区别

线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,
而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计算器
为其执行上下文。

单线程实战

from time import ctime,sleep

def talk():
    print("start talk :%r"%ctime())
    sleep(2)

def write():
    print("start write:%r"%ctime())
    sleep(3)

if __name__ == '__main__' :
    talk()
    write()
    print("All end !%r" %ctime())

多线程实战

# -*- coding: utf-8 -*-
from time import sleep,ctime
import threading

# 定义说和写
def talk(content,loop):
    for i in range(loop):
        print("start talk:%s %s"%(content,ctime()))
        sleep(2)

def write(content,loop):
    for i in range(loop):
        print("start write:%s %s"%(content,ctime()))
        sleep(3)
# 定义和加载说和写的线程
threads = []

t1 = threading.Thread(target=talk,args=("hello",2))
threads.append(t1)

t2 = threading.Thread(target=write,args=("人生苦短,我用python!",2))
threads.append(t2)
# 执行多线程
if __name__ == '__main__':
    for t in threads:
        t.start()
    for t in threads:
        t.join()
    print("线程全部执行完成!%s"%ctime())

多进程实战

# -*- coding: utf-8 -*-
from time import ctime,sleep
# 导入multiprocessing进程模块
import multiprocessing

# 定义两个方法 说和写
def talk(content,loop):
    for i in range(loop):
        print("Tlak: %s %s"%(content,ctime))
        sleep(2)


def write(content, loop):
    for i in range (loop):
        print ("write: %s %s" % (content, ctime))
        sleep (3)

# 定义两个进程
process = []
p1 = multiprocessing.Process(target=talk,args=("hello",2))
process.append(p1)

p2 = multiprocessing.Process(target=write,args=("人生苦短,我用python",2))
process.append(p2)

# 调用进程
if __name__ == "__main":
    for p in process:
        p.start()
    for p in process:
        p.join()
    print("调用进程结束 %s"%ctime())

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100699.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java打印数组的四种方式「建议收藏」

    Java打印数组的四种方式「建议收藏」1.使用循环结构这里使用的是for循环publicclassPrintArrays{ publicstaticvoidmain(String[]args){ int[]a={1,2,3,4,5}; for(inti=0;i<a.length;i++){ System.out.print(a[i]+”\t”); } }}…

  • 系统错误号:0x8007005[通俗易懂]

    系统错误号:0x8007005通常这个错误代码是错误的权限导致的,所以只要改变系统的安全设置就行了。下载这个文件SubInACL(SubInACL.exe)http://www.microsoft.com/downloads/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en安装这

  • SAE J1939 – 简短介绍[通俗易懂]

    SAE J1939 – 简短介绍[通俗易懂]SAEJ1939–简短介绍在商用车辆领域,标准化的,串行的协议用于单个电子控制单元(ECU)和传动系统组件之间的通讯已有一段时间。通过使用标准化的串行协议,可具有以下优势:组件制造商只需要采用一个协议;这主要是商用车辆才会涉及的问题,因为生产量低。商用车辆制造商可依靠不同供应商的组件。可确保组件之间的互操作性,来自不同制造商的组件不用调整就可一同工作。由国际汽车工程师协会…

  • Linux命令学习总结:date命令【转】

    Linux命令学习总结:date命令【转】

  • 验证码的作用及原理

    验证码的作用及原理验证码的发展历程从互联网诞生前期,互联网是没有验证码的。在论坛博客上发帖子,只要敲一下回车键按“发表”就可以了。然而,有白客就有黑客,随着计算机程序的愈发发展,黑客十分猖狂。他们编写了一种能够大量、重复编写信息的程序,伪装成人类用户,肆无忌惮的在网络上倾倒大量的、无意义的“僵尸”信息,垃圾邮件、垃圾广告、垃圾评论到处飞。更编写了模仿登录、恶意激活成功教程代码、刷票等恶意程序。这严重影响了互联网的正常运行,导致体验效果很差。以受影响最大的电子邮件的提供商为例:用户每天收到数以千计的垃圾邮件,严重影响工作效率。.

  • 【笔记】ES6 模板字符串

    【笔记】ES6 模板字符串ES6中的字符串可以用反引号括起来用作模板字符串。conststr=`HelloWorld`console.log(str)//HelloWorld通过上面的例子,我们能感觉到,这个用反引号括起来跟单引号括起来貌似没有什么区别,那我们为什么要用模板字符串呢?那是因为我们还没有讲到模板字符串的特性。模板字符串内可以插入变量值和表达式//插入变量constmoon=’月亮’conststr1=`代表${moon}消灭你`console.log(str1)/.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号