进程小练习

简介: 进程小练习

必会题

1.简述你对进程的理解

进程是应用程序在操作系统中的一种实例表现,一个应用程序至少会对应一个进程。

进程是系统进行资源分配基本单位,每启动一个进程操作系统都需要为其分配运行资源。

在创建子进程时,子进程会复制当前父进程的执行环境。

线程是依附在进程里面的,没有进程就没有线程,一个进程默认提供一条线程,进程可以创建多个线程


2.进程在执行过程中的状态有几种?

就绪态:运行的条件都已经慢去,正在等在cpu执行

执行态:cpu正在执行其功能

等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态

练习题

1.UDP和TCP哪种协议可以发送广播消息?如何发送广播消息?

复习UDP和TCP的区别

UDP(TCP是一对一连接的)

设置socket选项为广播:setsockopt(socket.SOL_SOCK,socket.SO_BROADCAST,True),并设置发送目的地址为广播地址("xxx.xxx.xxx.255")


2.什么是程序?什么是进程?

程序是一些可执行的静态文件,比如我们写的**.py

一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元


3.进程和线程的区别?

定义的不同:

  1. 进程:进程是系统进行资源分配和调度的一个独立单位.
  2. 线程:线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

区别:

  1. 一个程序至少有一个进程,一个进程至少有一个线程.
  2. 线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
  3. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
  4. 线线程不能够独立执行,必须依存在进程中
  5. 可以将进程理解为工厂中的一条流水线,而其中的线程就是这个流水线上的工人

优缺点:

  1. 线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。


4.进程的状态有哪些,分别表示什么含义?

就绪态:运行的条件都已经慢去,正在等在cpu执行

执行态:cpu正在执行其功能

等待态:等待某些条件满足,例如一个程序sleep了,此时就处于等待态


5.进程的创建方式?启动方式?

p = multiprocessing.Process(target=func_name) #不要加括号

p.start()


6.如何查看当前进程信息?

multiprocessing.current_process()


7.获取当前进程编号的方式?

current_process.pid

os.getpid()


8.如何获取父进程的编号?

os.getppid()


9.怎么根据进程号强制销毁对应进程?

os.kill(pid, 9)


10.创建线程常用参数及意义?

group:进程组,目前只能设置为None

target:要执行的任务函数,不加括号

name:指定进程名

args:给任务函数传参,类型为元组

kwargs:给任务函数传参,类型为字典,键名为形参


11.完成TCP文件下载器多线程版本  客户端

import threading,os
from socket import *
 def down_load_file(recv_data):
     recv_data = recv_data.decode()
     index = recv_data.find(" ")
     file_name =recv_data[0:index]
    print(file_name,"----")
     file_content = recv_data[index+1:]
    with open(file_name,'w') as f:
        f.write(file_content)
def main():
    # 创建socket
    tcp_client_socket = socket(AF_INET, SOCK_STREAM)
    # 目的信息
    server_ip = input("请输入服务器ip:")
    server_port = int(input("请输入服务器port:"))
    # 链接服务器
    tcp_client_socket.connect((server_ip, server_port))
    # 输入需要下载的文件名
    dir_name = input("请输入要下载的文件夹名:")
    # 发送文件下载请求
    tcp_client_socket.send(dir_name.encode("utf-8"))
    new_dir = "[download]"+dir_name
    os.mkdir(new_dir)
    os.chdir(new_dir)
    while True:
        # 接收对方发送过来的数据
        recv_data = tcp_client_socket.recv(1024*1024)
        if recv_data:
            t = threading.Thread(target=down_load_file,args=(recv_data,))
            t.start()
    # 关闭套接字
    tcp_client_socket.close()
if __name__ == "__main__":
    main()

12TCP文件下载器多线程版本  服务端

import threading
 from socket import *
 import sys,os
 def send_file(sock,file_name):
     try:
         with open(file_name,"r") as f:
             content = file_name+' '+f.read()
             sock.send(content.encode())
    except Exception as e:
        print(e)
       print("结束")
def main():
    if len(sys.argv) != 2:
        print("请按照如下方式运行:python3 xxx.py 7890")
        return
    else:
       # 运行方式为python3 xxx.py 7890
        port = int(sys.argv[1])
    # 创建socket
    tcp_server_socket = socket(AF_INET, SOCK_STREAM)
    # 本地信息
    address = ('', port)
    # 绑定本地信息
    tcp_server_socket.bind(address)
    # 将主动套接字变为被动套接字
    tcp_server_socket.listen(128)
    while True:
        # 等待客户端的链接,即为这个客户端发送文件
        client_socket, clientAddr = tcp_server_socket.accept()
        # 接收对方发送过来的数据
        dir_name = client_socket.recv(1024*1024)
        if dir_name:
            os.chdir(dir_name)
            file_list =os.listdir("./")
            for i in file_list:
                t = threading.Thread(target=send_file,args=(client_socket,i))
                t.start()
    # 关闭监听套接字
    tcp_server_socket.close()
if __name__ == "__main__":
    main()

13. 进程能否共享全局变量?

不能,他们拥有的是独立的空间和资源


14. 主进程是否等待子进程?

是的,但是异步方式添加到进程池时,主进程不会等待


15. 如何让主进程退出时不等待子进程?

设置子进程的daemon属性为True:p.daemon=True

p.terminate()


16. 进程间是怎么进行通信的?

进程拥有相互独立的空间和资源,要进行通信需要借助Queue()


17. 进程池的作用?

如果需要创建很多的子进程时,进程池会大大的节省工作代码量

节省创建和回收进程资源的开销


18. 进程池使用流程?

常见pool对象----添加任务(同步和异步的方式)----关闭


19.进程中进程间如何通信

使用multiprocessing.Manager().Queue()

相关文章
|
4月前
|
存储 安全 Linux
进程与线程(一)进程相关
进程与线程(一)进程相关
32 1
|
7月前
|
Linux API 调度
进程,任务
进程,任务
39 1
|
7月前
|
存储 Java Unix
什么是进程?
什么是进程?
71 0
|
7月前
|
Shell Linux 调度
进程与线程
进程与线程
36 1
|
7月前
|
Java Linux API
进程的认识
进程的认识
|
7月前
|
C语言
进程的初步实现
进程的初步实现
95 0
|
存储 算法 程序员
一定要知道的进程知识
一定要知道的进程知识
151 0
一定要知道的进程知识
查看一个进程的线程情况
查看一个进程的线程情况
153 0
查看一个进程的线程情况
|
存储 调度
关于进程的那些事
关于进程的那些事
91 0

热门文章

最新文章

相关实验场景

更多