阅读 57

pycharm怎么运行python代码,pycharm怎么创建python项目

过程是什么?

当程序运行时,它将成为一个进程,其中包含正在运行的程序和程序使用的内存和系统资源。

进程由多个线程组成。

什么是线程?

线程是程序中的执行流,每个线程都有自己的专用寄存器(堆栈指针、程序计数器等),但代码区域是共享的

这意味着不同的线程可以执行相同的函数。

什么是多线程?

多线程意味着程序包含多个执行流。 这意味着一个程序可以同时运行多个不同的线程来执行不同的任务。

这意味着一个程序可以创建多个并行执行线程来完成每个任务。

多线程的优点:

可以提高CPU的利用率。 在多线程程序中,当一个线程必须等待时,CPU可以执行另一个线程,而不是等待。

这将大大提高程序的效率。

多线程的不利方面:

因为线程也是程序,所以线程需要消耗内存,线程越多越消耗内存

多线程需要协调和管理,因此需要花费CPU时间跟踪线程;

线程间对共享资源的访问相互影响,必须解决共享资源的竞争问题;

线程过多可能会导致控制过于复杂,最终导致很多bug;

多线程与单线程的区别

生活的例子

你早上上班,正要打卡的时候,手机响了。 我先接了电话,接完之后,就挂了卡。 是单线程的。

如果你一手接电话,一手打卡。 是多线程的。

两件事的结果是一样的。 你接了电话并打了卡。

多线程处理的优点

开发同步APP应用程序相对容易,但效率不如多线程APP应用程序,因为在开始新任务之前必须完成前面的任务。 如果同步任务的完成时间超过预期,则APP应用程序可能没有响应。 多线程处理可以同时执行多个进程。 例如,文字处理APP应用程序可以在处理文档的同时进行拼写检查。 由于多线程APP应用将程序划分为单独的任务,因此可以在以下方面大幅提高性能:

多线程技术使用户界面在执行其他任务时始终处于活动状态,从而提高程序的响应速度。

当前尚未处理的任务可将处理器时间推让给其它任务。

需要花费大量处理时间的任务可以定期将处理器时间让给其他任务。

随时都可以停止任务。

为了优化性能,可以单独设置每个任务的优先级。

是否需要创建多线程APP应用程序取决于几个因素。 在以下情况下最适合多线程处理:

这会花费很长时间,而且会占用大量处理器的任务会阻止用户界面操作。

每个任务都需要等待外部资源,如远程文件和互联网连接。

例如,用于跟踪网页上的链接并下载满足特定条件的文件的internet APP应用程序“ROBOT”。 这样的APP应用程序可以按顺序同步下载各个文件,也可以使用多线程同时下载多个文件。 多线程方式比同步方式效率更高。 因为在某些线程上,即使远程WEB服务响应非常慢,也可以下载文件。

多线程的示例如下所示

在DOS时代,人们要求实现多任务处理。 于是出现了TSR类型的后台驻留程序,代表性的是SIDE KICK、VSAFE等优秀的TSR程序,这样的程序的出现和应用确实在用户使用计算机方面非常方便,比如SIDE KICK 但是,DOS单任务操作系统的致命缺陷是,DOS注定无法开发真正的多任务程序。 进入WINDOWS3.1时代后,这种情况仍然没有根本性的改变,一次APP应用只能做一件事。 例如,数据库查询在查询过程中,除非正确创建了APP应用程序,否则整个系统都不会响应用户的输入。

进入WINDOWS NT和WINDOWS 9X时代后,操作系统真正实现了多任务处理(严格来说,WIN9X还无法计算)。 根据需要,APP应用程序可以有多个执行线程。 每个线程都是一个小可执行文件,操作系统会自动让每个线程共享CPU资源,这样任何线程都无法将系统死锁。 这样,在编程过程中,可以将耗时的任务移动到后台,并在前台通过另一个线程接收用户输入。 对于要求实时的编程任务,如网络客户服务、串行通信等,多线程的实现无疑大大提高了程序的可用性和鲁棒性。

请参见----------------------------------------- -

1。 单线程:一个人在一张桌子上吃饭。

2。 单进程多线程:多人在同一张桌子上一起吃饭。

3。 多进程单线程:多人各自在自己的桌子上吃饭。

多线程的问题是多人同时吃一个菜时容易发生争夺。 例如,两个人同时夹着一个菜,一个人刚伸出筷子,伸出来的时候已经被菜夹住了。 请参阅。 请参阅。 这时,一个人插嘴后,就要等另一个人来夹菜。 也就是说,资源共享是冲突争夺的。

1。 对于Windows系统来说,【开桌子】是很费钱的,所以Windows鼓励在一张桌子上吃饭。 因此,Windows多线程学习的重点是面临资源争夺和同步的问题。

2。 因为对Linux系统来说【打开桌子】的开销很小

Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。


--
补充:有人对这个开桌子的开销很有兴趣。我把这个问题推广说开一下。

开桌子的意思是指创建进程。开销这里主要指的是时间开销。
可以做个实验:创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。在我机器上的测试结果是:
UbuntuLinux:耗时 0.8 秒
Windows7:耗时 79.8 秒
两者开销大约相差一百倍。

这意味着,在 Windows 中,进程创建的开销不容忽视。换句话说就是,Windows 编程中不建议你创建进程,如果你的程序架构需要大量创建进程,那么最好是切换到 Linux 系统。

大量创建进程的典型例子有两个,一个是 gnu autotools 工具链,用于编译很多开源代码的,他们在 Windows 下编译速度会很慢,因此软件开发人员最好是避免使用 Windows。另一个是服务器,某些服务器框架依靠大量创建进程来干活,甚至是对每个用户请求就创建一个进程,这些服务器在 Windows 下运行的效率就会很差。这"可能"也是放眼全世界范围,Linux 服务器远远多于 Windows 服务器的原因。

--
再次补充:如果你是写服务器端应用的,其实在现在的网络服务模型下,开桌子的开销是可以忽略不计的,因为现在一般流行的是按照 CPU 核心数量开进程或者线程,开完之后在数量上一直保持,进程与线程内部使用协程或者异步通信来处理多个并发连接,因而开进程与开线程的开销可以忽略了。

另外一种新的开销被提上日程:核心切换开销。

现代的体系,一般 CPU 会有多个核心,而多个核心可以同时运行多个不同的线程或者进程。

当每个 CPU 核心运行一个进程的时候,由于每个进程的资源都独立,所以 CPU 核心之间切换的时候无需考虑上下文。

当每个 CPU 核心运行一个线程的时候,由于每个线程需要共享资源,所以这些资源必须从 CPU 的一个核心被复制到另外一个核心,才能继续运算,这占用了额外的开销。换句话说,在 CPU 为多核的情况下,多线程在性能上不如多进程。

因而,当前面向多核的服务器端编程中,需要习惯多进程而非多线程。 ----------------------------------------------------------------------------------------------------------------------------------

很多人答案说的是操作系统提供的多进程而不是单个程序内的多线程。

多线程使得程序内部可以分出多个线程来做多件事情,而不会造成程序界面卡死。比如迅雷等多线程下载工具就是典型的多线程。一个下载任务进来,迅雷把文件平分成10份,然后开10个线程分别下载。这时主界面是一个单独的线程,并不会因为下载文件而卡死。而且主线程可以控制下属线程,比如某个线程下载缓慢甚至停止,主线程可以把它强行关掉并重启另外一个线程。

另外就是一些程序的打印功能,比如记事本、Adobe Reader,打印的时候就只能打印,无法在主界面进行操作,而Word就有“后台打印”的功能,点了打印命令之后,还可以回到主界面进行修改、保存等操作。

另外多线程除了并行完成一些任务以外,还有生产者-消费者模式。比如Windows命令行下在某个硬盘根目录执行一个"dir/s | more"命令,前一条显示硬盘里的所有文件,要执行很久才能执行得完,后面那条命令会把前面命令的输出分屏显示出来。但是执行整条命令时,会立刻有显示,也就是说,前面一条命令输出满一页内容到缓冲区,more命令就把缓冲区封死了,等用户敲了一个键显示下一屏的时候,more命令把缓冲区的内容取出并清空,前面的命令才能输出下一屏到缓冲区。这样的多线程使得整条命令不用等待前面的命令全部执行完才能执行下一条命令。

多线程和多进程的区别。平常指的多进程是操作系统下同时运行多个进程,比如Word和Excel同时打开,并且可以并行地同时执行一些操作。这种多进程和多线程没什么好比较的。可以比较的是同一个程序里的多线程和多进程。

多线程因为在同一个进程里,所以可以共享内存和其他资源,比如迅雷里10个线程一齐下载一个文件,这个文件是由进程打开的,然后10个线程都可以往里写入东西。如果是10个进程就不行了,操作系统不允许一个文件由两个进程同时写入。另外,Chrome就是一个典型的多进程程序,里面每个标签页、扩展、插件都是单独的进程,各自独占资源,相互隔离,一个进程出错死掉只会影响一个页面或者插件,再也不会出现Flash插件出错崩溃导致整个浏览器崩溃的情况了。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐