进程与线程相关的介绍

进程:

  • 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和QQ,系统会分别启动两个进程
  • 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间中

线程:

  • 一个进程要想执行任务,必须得有线程(每个进程至少要有一条线程),是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位
  • 一个进程(程序)的所有任务都在线程中执行
  • 一个程序有且只有一个主线程,程序启动时创建(调用main来启动),主线程的生命周期和应用程序绑定,程序退出时,主线程也停止
  • 同一时间内,一个线程只能执行一个任务,若要在一个进程中执行多个任务,那么只能一个一个按顺序执行这些任务(线程的串行)
  • 线程自己不拥有系统资源,只拥有在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源

线程的几种状态:

  • 新建状态:新创建一个线程对象
  • 就绪状态:线程对象创建之后,其他线程调用了该对象的start方法,该状态的线程位于可运行线程池中,变得可运行,等到获取CPU的使用权
  • 运行状态:就绪状态的线程获取了CPU,执行程序代码
  • 阻塞状态:因某种原因放弃CPU使用权,暂时运行,直到线程进入就绪状态,才有机会成为运行状态
  • 死亡状态:线程执行完了或者因异常退出了run方法,线程生命周期结束

进行和线程比较:

  • 线程是CPU调度(执行任务)的最小单位,是程序执行的最小单元
  • 进程是CPU分配资源和调度的单位
  • 一个程序可以对应多个进程,一个进程可以有多个线程,但至少要有一个线程,而一个线程只能属于一个进程
  • 同一个进程内的线程共享进程的所有资源

多线程:

  • 概念:一个进程中可以开启多条线程,每一条线程可以并行(同时)执行不同的任务
  • 原理:同一时间,CPU只能处理一条线程,只有一条线程在工作,多线程并发(同时)执行,其实是CPU快速的在多条线程之间调度(切换),如果CPU调度线程的时间足够快,就造就了多线程并发执行的假象
  • 注意:如果线程很多,CPU会在N多线程之间调度,会消耗大量CPU资源,每条线程被调度执行的频次会降低(线程的执行效率会降低)

多线程的优缺点:

  • 优点:能适当的提高程序的执行效率以及资源利用率(CPU、内存利用率)
  • 缺点:创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1kb)、栈空间(子线程512kb,主线程1MB)、创建线程大约需要90毫秒的创建时间,如果开启大量的线程,会降低程序的性能(一般最多3到5条);线程越多,CPU在调度线程上的开销就越大;程序设计更加复杂(比如线程之间的通信、多线程的数据共享)

主线程:

  • 一个iOS程序运行后,默认会开启1条线程,称为“主线程”或者“UI线程”
  • 作用:显示/刷新UI界面,处理UI事件(点击事件、滚动事件、拖拽事件等)
  • 使用注意:不要将耗时的操作放在主线程中,耗时操作应放在子线程(后台线程,非主线程);凡是和UI相关的操作应放在主线程中操作

iOS中多线程的实现方案:

  • pthread:一套通用的多线程API,适用于Unix、Linux、Windows等系统,跨平台、可移植,使用难度大,C语言编写,线程的生命周期需要由程序员管理
  • NSTread:OC语言编写,面向对象,简单易用,可直接操作线程对象,线程的生命周期依然由程序员管理
  • GCD:替代NSTread的线程技术,用C语言编写,充分利用设备的多核,线程生命周期自动管理
  • NSOperation:对GCD进行的一次封装,比GCD多了一些更简单使用的API,在使用上更加面向对象,线程生命周期也是自动管理的

原文地址:https://www.cnblogs.com/cchHers/p/10010270.html

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

进程与线程相关的介绍的相关文章

进程和线程相关

一.操作系统/应用程序 1.硬件 硬件包括硬盘.cpu.主板.显卡.内存.电源........ 2.系统 系统就是由程序员写出来的软件,该软件用于控制计算机的硬件,让他们相互配合工作 3.安装软件(安装应用程序) 二.线程和进程 应用程序调用操作系统的线程和进程 单进程.多线程的应用程序 1 import threading 2 print('666') 3 4 def func(arg): 5 print(arg) 6 t = threading.Thread(target=func) #创建

进程 & 线程相关知识

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

python之进程、线程、协程的调度原理

进程.线程和协程的调度和运行原理总结. 进程.线程的调度策略介绍 linux的操作系统详细调度策略可参考:http://blog.csdn.net/gatieme/article/details/51872659 linux中的进程主要有三种调度策略: 优先级调度:将进程分为普通进程和实时进程: 先进先出(队列)调度:实时进程先创建的先执行,直到 轮转调度(时间片):达到一定的CPU执行时间后强制切换: 多进程程序的调度其实还是线程的调度,线程才是CPU调度的基本单位:在同一个进程内线程切换不会

进程池线程池 协程

socket服务端实现并发 服务端需要满足以下3点: 1 固定的ip和port 2 24小时提供服务 3 能够实现并发 多线程实现并发: 服务端: import socket from threading import Thread import os server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen(5) #半连接池 def communicate(conn): while True: try: dat

Linux基础--进程管理相关命令介绍(2)

本文主要介绍了Linux中进程管理的相关命令,涉及到的主要命令有top,vmstat等. (1)top ①功能:用来查看CPU,内存以及进程的状态. ②用例: ③相关注释: load average表示负载,三个数值分别表示第1分钟,第5分钟,第10分钟 Cpu中us表示用户空间程序占用百分比,sy表示内核模式占用百分比,ni表示调整NICE值所占用的    CPU百分比,id表示CPU的空闲比例,wa表示等待磁盘IO完成所占用的时间比例,hi表示硬件中断占     据的百分比,si表示软中断所

Linux基础--进程管理相关命令介绍(1)

本文主要介绍了Linux中进程管理的相关命令,涉及到的主要命令有pstree,ps. (1)pstree ①功能:用来查看进程树 ②用例: (2)ps ①功能:用来显示系统当前进程状态的命令 ②用例: ③相关用法: ps a:显示所有跟终端相关的进程 ps x:显示所有跟终端无关的进程 相关注释: STAT各代码含义: S:可中断的睡眠态 D:不可中断的睡眠态 R:运行或可运行 T:停止 Z:僵死 s:session leader l:多线程进程 +:前台进程 N:低优先级进程 <:高优先级进程

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

进程.线程.多线程相关总结 一.说说概念 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