python的进程,线程

问题描述

最近学弟提了一个非常有趣的问题,在此记录:

问题:

我发现制作动画的过程中,整个程序好像差不多跑了10分钟,但是CPU却没有跑满(使用率大概20%-30%),有谁知道怎么让CPU跑满,让程序跑快点么?????

在这里插入图片描述

具体过程我也不想说了,真的很累。

就这样吧先。

什么是进程

[1] 进程. https://baike.baidu.com/item/进程/382503?fr=aladdin

狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。


广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。

由此可以理解:进程是正在运行(即处理器CPU对其执行)的系统的实例。

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。


并发性:任何进程都可以同其他进程一起并发执行


独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;


异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进


结构特征:进程由程序、数据和进程控制块三部分组成。


多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

可知:进程具有并发性。
疑问:一个jar包,是不是可以同时处理多个不同的数据集呢???

在这里插入图片描述

百度百科讲的很详细了。

在这里插入图片描述

线程

[2] 什么是进程,什么是线程,什么时候用进程,什么时候用线程. https://blog.csdn.net/qq_40395404/article/details/79751506
这个网站也参考了:[3] 线程. https://baike.baidu.com/item/线程

进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程


进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。一个进程无法直接访问另一个进程的变量和数据结构, 如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道,文件, 套接字等。


一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。 线程与进程的一个主要区别是,同一进程内的多个线程会共享部分状态, 多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。同时, 每个线程还拥有自己的寄存器和栈,其它线程可以读写这些栈内存。


线程是进程的一个实体,是进程的一条执行路径


线程是进程的一个特定执行路径。当一个线程修改了进程中的资源, 它的兄弟线程可以立即看到这种变化

在这里插入图片描述

可见:一个进程包含多个线程。
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

[4] Linux学习-什么是进程 (process). https://www.cnblogs.com/uetucci/p/7742306.html

进程 (process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载内存中,操 作系统并给予这个内存内的单元一个标识符 (PID),可以说,进程就是一个正在运作中的程序。

这里讲的不错。但是不全吧。

那么在python中怎么计算程序运行的时间呢

import datetime
print(datetime.datetime.now())

针对进一步提问:

我固态硬盘读写450mbps,运行程序的时候磁盘占用连1%都不到,有时候直接停转了。不是io 的问题吧???

我本来就是一知半解,所以,这个问题难住了我。故在此补充。

以下为补充内容,时间:2018年11月30日17:00:19

知识补充学习。

[1] python模块之psutil详解。 https://www.cnblogs.com/saneri/p/7528283.html
原来psutil是用来获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息的。

[2] Get IO Wait time as % in python. https://stackoverflow.com/questions/29548735/get-io-wait-time-as-in-python
这里讲到了psutil。但是好像对我没用?

[3] Python之利用psutil写一个命令行网速实时监控小程序。 https://www.jianshu.com/p/8e0560549084
这里用psutil做了一个简单的实时网速测量,还是非常有意思的。
不过不是我想看的。

[4] Measure Computing Time and I/O Time of a Program。 https://stackoverflow.com/questions/10416468/measure-computing-time-and-i-o-time-of-a-program
这个是用time来度量IO时间和CPU时间。值得探索

[5] Python: How to measure time spent waiting for I/O? https://stackoverflow.com/questions/25952998/python-how-to-measure-time-spent-waiting-for-i-o
程序倒是写的不错,然而答非所问,可惜。

import time                                                

def measure_time(f):
    def timed(*args, **kw):
        ts = time.time()
        result = f(*args, **kw)
        te = time.time()
    
        print( '%r (%r, %r) %2.2f sec' % \
              (f.__name__, args, kw, te-ts))
        return result
    
    return timed
#You can use it like this :
@measure_time
def foo():
    i=0
    while(i<10000):
        i+=1
        print('hehe')
             
measure_time(foo())

[6] Measure Time in Python – time.time() vs time.clock()。 https://www.pythoncentral.io/measure-time-in-python-time-time-vs-time-clock/
在这里插入图片描述

[7] Profiling and Timing Code. https://jakevdp.github.io/PythonDataScienceHandbook/01.07-timing-and-profiling.html
这里有段代码,可以在console中运行:

import random
L = [random.random() for i in range(100000)]
print("sorting an unsorted list:")
%time L.sort()

在这里插入图片描述

这里表明,其实walltime也好,usertime也好,时间都差不多的。这个没关系的。

[8] Java NIO 学习:IO与CPU处理时间的关系。 https://www.aliyun.com/jiaocheng/851269.html
讲了下IO的事情。

[9] cpu内存磁盘io过高问题处理。 http://blog.51cto.com/superleedo/2140497
这个我觉得很厉害,不过都是在ubuntu,linux下做的。

[10] Measure total time spent by a process on IO。 https://stackoverflow.com/questions/37181796/measure-total-time-spent-by-a-process-on-io
说可以用strace。但也是在ubuntu下。

测量 Python 程序的 io 时间和 cpu 时间. https://www.v2ex.com/amp/t/355974
这里进行了很多讨论,但是不是我想要的结果。

[11] Python中统计程序运行时间的方法汇总. https://blog.csdn.net/mago2015/article/details/81079270?utm_source=blogxgwz9
一句话有用:

注:程序执行时间=cpu时间 + io时间 + 休眠或者等待时间

总结

实在能力有限,阻止我得到正确答案的原因分析如下:
1)我对IO,CPU时间,磁盘读写,这些程序底层相关的东西实在不懂(本科当时没好好学习,实在可惜)
2)查了很多资料,英文中文都有,但是都没有我想要的答案,而且有一些还只适用于ubuntu这类系统,如果我要在ubuntu下配置,又很麻烦,所以我不想搞了

又花了一个小时。
先到此为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值