进程和线程相关

一、操作系统/应用程序

1、硬件

硬件包括硬盘、cpu、主板、显卡、内存、电源........

2、系统

系统就是由程序员写出来的软件,该软件用于控制计算机的硬件,让他们相互配合工作

3、安装软件(安装应用程序)

二、线程和进程

应用程序调用操作系统的线程和进程

单进程、多线程的应用程序

1 import threading
2     print(‘666‘)
3
4         def func(arg):
5     print(arg)
6     t = threading.Thread(target=func) #创建线程
7     t.start()
8
9     print(‘end‘)   #主线程

一个应用程序(软件),可以有多个进程(默认只有一个),一个进程中可以创建多个线程(默认只有一个)

操作系统帮助开发者操作硬件

python在多线程和多进程的情况

1、多线程情况下

  计算机密集型操作:效率低。(GIL锁)

  IO操作:效率高

2、多进程的情况下

  计算机密集型:效率高(浪费资源,不得已而为之)

  IO操作:效率高

对于python进程和线程的选择:

  计算机密集型:多进程

  IO操作:多线程

3、GIL锁:是全局解释器锁。用于限制一个进程中同一个时刻只有一个线程被CPU处理  

  扩展:默认GIL锁在执行100个CPU指令(过期时间)

1 import sys
2 v1=sys.getcheckinterval()
3 print(v1)   #100

三、在python中主线程和子线程的执行情况

1、主线程默认等待子线程执行

1 import time
2 def func(arg):
3     time.sleep(arg)
4     print(arg)
5 t1 = threading.Thread(target=func,args=(3,))
6 t1.start()
7 t2 = threading.Thread(target=func,args=(9,))
8 t2.start()
9 print(123)  # 打印结果 123,3,9

当把time.sleep(arg)去掉时打印结果:3,9,123

2、主线程不在等待子线程,主线程执行完毕则所有子线程终止(子线程在可以在主线程之前完成)
加上   子线程.setDaemon()

 1 import time
 2 def func(arg):
 3     time.sleep(2)
 4     print(arg)
 5
 6 t1 = threading.Thread(target=func,args=(3,))
 7 t1.setDaemon(True) #设置等待
 8 t1.start()
 9
10 t2 = threading.Thread(target=func,args=(9,))
11 t1.setDaemon(True)
12 t2.start()
13 print(123)

3、开发者可以控制主线程等待子线程的时间(最多等待时间)

总结:

1、线程是CPU工作的最小单元,创建线程是为了利用多核优势实现操作

2、创建进程是为了做数据隔离,进程是为了提供环境让线程工作

3、在python中存在一个GIL锁

  影响:多线程无法利用多核优势

  解决:创建多进程

4、IO密集型:多线程

  计算机密集型:多进程

原文地址:https://www.cnblogs.com/liaopeng123/p/9621044.html

时间: 2024-07-31 17:31:42

进程和线程相关的相关文章

进程与线程相关的介绍

进程: 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和QQ,系统会分别启动两个进程 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间中 线程: 一个进程要想执行任务,必须得有线程(每个进程至少要有一条线程),是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位 一个进程(程序)的所有任务都在线程中执行 一个程序有且只有一个主线程,程序启动时创建(调用main来启动),主线程的生命周期和应用程序绑定,程序退出时,主线程也停止 同一时间内,一个线

进程 & 线程相关知识

不管Java,C++都有进程.线程相关的内容.在这里统一整理吧. Python的线程,其实是伪线程,不能真正的并发.下面也有讲. 线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈). 多个线程共享内存. 参考了这篇文章:http://www.cnblogs.com/qiaoconglovelife/p/5319779.html 进程与PCB 进程:进程是程序的一次执行过程,是系统进行资源分配和调度的一个独立单位. 进程实体(进程映像):由程序段.相关数

进程、线程、多线程相关总结

进程.线程.多线程相关总结 一.说说概念 1.进程(process) 狭义定义:进程就是一段程序的执行过程. 广义定义:进程是一个程序关于某个数据集合的一次运行.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 简单的来讲进程的概念主要有两点:第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stack region).文本区域存储处理器执行的代码:数

C# 获取进程或线程的相关信息

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace ConsoleApp { class ProcessDo { /// <summary> /// 获取进程相关信息 /// </summary> public static void GetProcessInfomation() { Proc

进程与线程的相关知识点总结

进程(process): 首先要知道操作系统在底层,负责任务的分配.资源的管理和分配,统领整个计算机硬件.而应用程序是运行在操作系统上的,需要占用操作系统的资源.那么进程就是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程.(一颗CPU同一时间段内只能处理一个任务) 定义:进程是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体,拥有独立的地址空间(系统资源).作为拥有资源的基本单位. 进程一般由程序.数据集合和进程控制块(Program Control Block, P

该进程或线程自上一个步骤以来已更改

相关解决办法如下: VS进行高度时,断点处提示"该进程或线程自上一个步骤以来已更改" 每个断点跑两遍似的. 这个是由于在VS环境中 勾上了 "工具\选项--->调试--要求源文件与原始版本完全匹配"这个项 该进程或线程自上一个步骤以来已更改 英文表述:The process or thread has changed since last step 以下是是从网上摘录的解决办法. Q: I have a console application that exe

进程和线程、内核空间等概念

用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间.针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较

进程,线程

线程(thread) 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的就是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并执行不同的任务. threading 用于提供线程相关的操作. #!/usr/bin/env python3 import threading import time def show(arg): time.sleep(1) print('thread'+str(arg)) for i in range(10

Android进程与线程基本知识

Android进程与线程基本知识 本文介绍Android平台中进程与线程的基本知识. 很早的时候就想介绍一下Android中的进程和线程,但由于其他的事情一直给耽搁了,直到现在才能和大家一起分享下. 1.Android进程基本知识: 我们先来了解下Android中的进程基本知识. 当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都将在该进程和线程中运行. 同时,Android会为每个应用程序分配一个单独的LINUX用户.Android