py6.14

#创建线程:
# import os
# import time
# from threading import Thread
#
# def func(num):
#     print(num*num)
#     print('子线程',os.getpid()) #各个线程包括主线程的pid都是一个。
#
# def func2():
#     print('子线程2',os.getpid())
#
# def func3():
#     print('子线程3',os.getpid())
#
# t = Thread(target=func,args=(5,))#线程不需要执行main方法,不涉及到重读代码问题。
# t.start()
# Thread(target=func2).start()
# print('主线程',os.getpid())
# print('主线程结束的倒数第一句')#不管最后一句是不是开启子线程,都等到所有子线程结束之后主线程才结束。回收资源。
#利用多线程实现socket多人通信,由于切换速度快所以比用进程实现更快:
# import socket
# from threading import Thread
#
# def com(conn):
#     while 1:
#         conn.send(b'hello')
#         msg_r = conn.recv(1024).decode('utf-8')
#         print(msg_r)
#
# sk = socket.socket()
# sk.bind(('127.0.0.1',8090))
# sk.listen(5)
# while 1:
#     conn,addr = sk.accept() #循环接收client端的连接。没有则阻塞。
#     Thread(target=com,args=(conn,)).start()  #每来一个client创建并开启一个子线程。

# import time
# from threading import Thread
#
# def func():
#     time.sleep(2)
#     print('子进程1?2?3?')
#
# def func1():               #线程间是并发的。
#     for i in range(10):
#         print('第三个子进程')
#         time.sleep(0.5)
#
#
# Thread(target=func).start()
# Thread(target=func).start()
# Thread(target=func1).start()
#
# time.sleep(1)
# print('in main1') #子线程与主线程是并发的,同时执行的。
# time.sleep(1)
# print('in main2')
线程代码
#信号量和池:
#信号量是有多少个任务就开启多少个进程,然后根据锁的数量执行多少进程,其它进程等待,增大了操作系统的负担。
#池的开启进程数是固定的。
#线程: (threading)Thread
#特点:1.是被CPU能调度的最小单位。
#        进程是计算机中操作系统资源分配的最小单位。
#      2.线程之间资源不需要隔离。进程需要隔离。
#      3.切换速度远小于进程的切换速度。
#      4.每个进程必有一条线程。
#      5.每个进程执行代码的时候只能同步进行,所以需要线程来异步执行代码
#      6.是轻量级的进程。进程操作笨重。
#      7.主线程会等待子线程的结束而结束,否则主线程先结束,会丢掉一些重要的未执行完的子线程,
#        主进程会等待主线程的结束而结束。线程依赖于进程存在。
#      8.线程的个数:CPU个数*5 = 20
#数据混乱:全局解释锁。
#全局解释锁限制了每个线程访问CPU的权限,防止每个线程同时执行一个代码造成数据混乱。
#弊端:是所有解释器的弊端。如果没有同时执行一个计算的时候,其它欲执行其它计算的线程也被锁住了。
#但是CPU执行非常快。阻碍CPU在一些高IO的程序中并没有什么影响,且我们平时用的大多数都是高IO的程序。
线程特点

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9183929.html
今日推荐