前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进程小练习

进程小练习

作者头像
小闫同学啊
发布2019-07-18 10:53:27
4180
发布2019-07-18 10:53:27
举报
文章被收录于专栏:小闫笔记小闫笔记

必会题

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文件下载器多线程版本 客户端

代码语言:javascript
复制
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文件下载器多线程版本 服务端

代码语言:javascript
复制
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()

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 必会题
  • 练习题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档