#######################       线程介绍         ##############################

"""
线程介绍 为什么会有进程?
主要是能够同时处理多个任务,多个任务还要进行切换,时间片轮转
为什么会有线程?
进程并不是执行任务的最小单元,每一个进程里面有都一个线程,我们叫做主线程,
早期没有线程,一个进程只能干一个任务,如果有多个任务,只能多起进程,进程太多不行的,
进程内部的内存是共享的,所以需要线程,否则还要涉及到进程间的通信,这比较浪费资源 所以线程的出现解决了两个问题:
1,进程内部的通信
2,一个进程可以处理多个任务, 线程的开销比进程少,可以认为是一个轻型的进程,
进程是资源分配的最小单位,线程是cpu调度的最小单位, 进程和线程的区别:
1,进程之间的内存是独立的,但是一个进程之内的线程是可以共享的,
2,进程之间切换是慢于线程之间的切换的,
"""

##################      线程启动的两种方式       ###############

"""
在python中使用线程
threading模块
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 """ # 第一种启动方式:
from threading import Thread
import time,os def func(n): # 这是子线程完成的
time.sleep(1) # 虽然是打印了10次,但是只等待了1秒,所以10线程之间是并发的,
print(n) for i in range(10): # 启动10个线程,
t = Thread(target=func,args=(i,)) # 注册
t.start() # 这是启动了一个线程 # 第二种启动线程的方法:
# class MyTread(Thread):
# def __init__(self,arg):
# super().__init__()
# self.arg=arg
# def run(self):
# time.sleep(1)
# print(1,os.getpid()) # for i in range(10):
# t = MyTread(10) # 传递参数
# t.start()
#
# print("主线程",os.getpid()) # 打印子进程和主进程的进程号,都是一样的

Thread类的其他方法

# Threading中的其他方法
from threading import Thread
import time
def sayhi(name):
time.sleep(2)
print('%s say hello' %name)
if __name__ == '__main__':
t=Thread(target=sayhi,args=('egon',))
t.start()
t.join()
print('主线程')
print(t.is_alive())
'''
egon say hello
主线程
False
'''
###############################################
import threading
def func(n):
print(n, threading.current_thread()) # <Thread(Thread-1, started 5428)>
for i in range(10):
threading.Thread(target=func, args=(1,)).start()
print(threading.active_count()) # 查看活跃的线程数,
print(threading.current_thread())

###############       进程和线程的对比      ##############

"""
进程和线程的区别? 进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;
反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。 关系问题,资源问题,分工问题,效率问题,数据问题, 第一个结论要记住:进程先有的,然后才有线程,线程是进程的一部分,线程是依赖于进程的,没有进程就没有线程,
第二个结论要记住:一个进程里面一定有一个主线程,进程是一个资源分配的单位,真正执行代码的时候还是线程,
第三个结论要记住:进程需要开辟新的资源空间,所以多线程需要很大的资源才可以实现多任务,但是线程只需要很少的资源就可以实现多任务,
第四个结论要记住:进程之间是数据独立的,所以涉及到进程间的通信问题,但是一个进程的线程之间是资源共享的, 比如:
一个网易云音乐,开启了之后就是一个进程,
使用这个网易云音乐既要下载音乐,又要播放音乐,这就是两个线程, """

##################################################

python语法基础-并发编程-线程-线程理论和线程的启动的更多相关文章

  1. python语法基础-并发编程-进程-进程理论和进程的开启

    ############################################## """ 并发编程的相关概念: 进程 1,运行中的程序,就是进程,程序是没有生 ...

  2. python语法基础-并发编程-线程-长期维护

    ###############   线程和GIL,全局解释器锁    ############## """ 线程 为什么会有进程? 主要是能够同时处理多个任务,多个任务还 ...

  3. python语法基础-并发编程-进程-进程锁和进程间通信

    ###############   守护进程  ############## """ 守护进程 父进程中将一个子进程设置为守护进程,那么这个子进程会随着主进程的结束而结束 ...

  4. python语法基础-并发编程-协程-长期维护

    ###############    协程    ############## # 协程 # 小知识点, # 协程和进程和线程一样都是实现并发的手段, # 开启一个线程,创建一个线程,还是需要开销, ...

  5. python语法基础-并发编程-进程-进程池以及回调函数

    ###############   进程池    ############## """ 进程池的概念 为什么会有进程池? 1,因为每次开启一个进程,都需要创建一个内存空间 ...

  6. python语法基础-并发编程-进程-其他

    ###############    多进程的信号量    ############## # 多进程的信号量 from multiprocessing import Process import ti ...

  7. python语法基础-网络编程-TCP协议和UDP协议

    ###############    网络编程    ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...

  8. python语法基础-网络编程-HTTP协议

    ###############    HTTP协议    ############## """ 当你在浏览器地址栏敲入“http://www.cnblogs.com/”, ...

  9. Java并发编程(您不知道的线程池操作)

    Java并发编程(您不知道的线程池操作) 这几篇博客,一直在谈线程,设想一下这个场景,如果并发的线程很多,然而每个线程如果执行的时间很多的话,这样的话,就会大量的降低系统的效率.这时候就可以采用线程池 ...

随机推荐

  1. 关于C#设计SQllite

    使用3.5框架+System.Data.SQLite,System.Data.SQLite.Ling+SQLite.Designer三个dll

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-volume-down

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. ls 查看文件

    1.按文件大小查看文件 a.降序:ls -lsh moudaen@morton:~$ ls -lshtotal 20M 20M -rw-r--r-- 1 moudaen 65536  20M Nov ...

  4. 【剑指Offer】面试题24. 反转链表

    题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3 ...

  5. jmeter --- 压测时,如何让串联压测多个接口

    1.新建测试计划,在测试计划里勾选“独立运行每个线程组” 2.分别在每个线程组,添加聚合报告,以得到每个线程组的压测结果 3.设置不同接口压测的vu等,并为每个线程组,设置合理的启动延迟时间

  6. 自定义css

    /** * 重写FrozenUI */ /** * 按钮 */ body { background-color: #F2F2F2; } @media screen and (-webkit-min-d ...

  7. 基于云开发开发 Web 应用(四):引入统计及 Crash 收集

    在完成了产品的基础开发以后,接下来需要进行一些周边的工作,这些周边工具将会帮助下一步优化产品. 为什么要加应用统计和 Crash 收集 不少开发者在开发的时候,很少会意识到需要添加应用统计和 Cras ...

  8. 二十四、CI框架之URL辅助函数

    一.控制器代码如下: 二.view的显示代码中,关于路径,我们可以用另外一种方法来写, 如: "/CodeIgniter-3.1.10/index.php/welcome/add" ...

  9. CLR .net windows对win32 core抽象的新用处

    断断续续 花了一周的时间,把.net clr的一些知识看完了(确切的说是 一个段落),总体的感觉就是,ms把win32 core创建进程线程.虚拟地址.内存隔离的思想又重用了一遍,有所不同的是这次的场 ...

  10. JavaScript把两个数组对象合并成一个一一对应的数组对象

    合并数组或者对象在数组或对象前面加...,是es6的新写法,然后数组的map方法会返回数组. var obj1 = [{ , "model": "XQG70-S1208F ...