网络编程之多线程——多线程与多进程的区别
时间:2019-09-26
本文章向大家介绍网络编程之多线程——多线程与多进程的区别,主要包括网络编程之多线程——多线程与多进程的区别使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
网络编程之多线程——多线程与多进程的区别
一、谁的开启速度快?
1、在主进程下开启线程
from threading import Thread
def work():
print('hello')
if __name__ == '__main__':
t=Thread(target=work)
t.start()
print('主线程/主进程')
执行结果如下,几乎是t.start ()的同时就将线程开启了,然后先打印出了hello,证明线程的创建开销极小
hello
主线程/主进程
2、在主进程下开启进程
from multiprocessing import Process
def work():
print('hello')
if __name__ == '__main__':
#在主进程下开启子进程
p=Process(target=work)
p.start()
print('主线程/主进程')
执行结果如下,p.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程
主线程/主进程
hello
二、瞅一瞅pid
1、在主进程下开启多个线程,每个线程都跟主进程的pid一样
from threading import Thread
import os
def work():
print('hello',os.getpid())
if __name__ == '__main__':
t1=Thread(target=work)
t2=Thread(target=work)
t1.start()
t2.start()
print('主线程/主进程pid',os.getpid())
执行结果
hello 7939
hello 7939
主线程/主进程 7939
2、开多个进程,每个进程都有不同的pid
from multiprocessing import Process
import os
def work():
print('hello',os.getpid())
if __name__ == '__main__':
p1=Process(target=work)
p2=Process(target=work)
p1.start()
p2.start()
print('主线程/主进程',os.getpid())
执行结果
主线程/主进程 7951
hello 7952
hello 7953
三、同一进程内的线程共享该进程的数据
1、进程之间地址空间是隔离的
from multiprocessing import Process
import os
def work():
global n
n=0
if __name__ == '__main__':
n=100
p=Process(target=work)
p.start()
p.join()
print('主',n)
执行结果如下,毫无疑问子进程p已经将自己的全局的n改成了0,但改的仅仅是它自己的,查看父进程的n仍然为100
主 100
2、同一进程内开启的多个线程是共享该进程地址空间的
from threading import Thread
import os
def work():
global n
n=0
if __name__ == '__main__':
n=100
t=Thread(target=work)
t.start()
t.join()
print('主',n)
执行结果如下, 查看结果为0,因为同一进程内的线程之间共享进程内的数据
主 0
原文地址:https://www.cnblogs.com/Kwan-C/p/11589455.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法