<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>多线程 _ 扒房网</title>
	<atom:link href="https://www.gxjlyf.com/tag/17293/feed" rel="self" type="application/rss+xml" />
	<link>https://www.gxjlyf.com</link>
	<description>手机系统教程_手机软件教程_手机app使用教程_电脑软件教程_电脑系统教程</description>
	<lastBuildDate>Thu, 01 Dec 2022 07:23:08 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>我来教你如何避免多线程死锁</title>
		<link>https://www.gxjlyf.com/884158.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Thu, 01 Dec 2022 07:23:08 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[多线程]]></category>
		<category><![CDATA[死锁]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/884158.html</guid>

					<description><![CDATA[在多线程编程过程中，不仅仅要解决数据访问的同步与互斥，还要注意多线程的死锁问题，而造成多线程死锁的原因大概可以 ...]]></description>
										<content:encoded><![CDATA[<p>在多线程编程过程中，不仅仅要解决数据访问的同步与互斥，还要注意多线程的死锁问题，而造成多线程死锁的原因大概可以归咎于系统资源不足、进程推进顺序不当或者资源分配不当等问题。有什么方法可以避免多线程死锁的形成吗？请看下文。</p>
<p><img decoding="async" alt="如何避免多线程死锁？多线程死锁的原因和幸免策略" src="https://dz.cwhello.com/wp-content/uploads/2022/12/20221201072307-6388565baaf44.gif" /></p>
<p><strong>一、死锁原因与形成条件：</strong></p>
<p><strong>死锁形成的原因：</strong></p>
<p>1、系统资源不足；</p>
<p>2、进程（线程）推进的顺序不恰当；</p>
<p>3、资源分配不当。</p>
<p>从编程经验上来讲，形成死锁的一般原因有以下几种：</p>
<p>1、个人使用锁的经验差异。</p>
<p>2、程序模块使用锁的差异。</p>
<p>3、工程代码版本之间的差异。</p>
<p>4、工程代码分支之间的差异。</p>
<p>5、修改代码和重构代码带来的差异。</p>
<p><strong>死锁形成的条件：</strong></p>
<p>1、互斥条件：所谓互斥就是进程在某一时间内独占资源。</p>
<p>2、请求与保持条件：一个进程因请求资源而阻塞时，对已获得的资源保持不放。</p>
<p>3、不剥夺条件：进程已获得资源，在末使用完之前，不能强行剥夺。</p>
<p>4、循环等待条件：若干进程之间形成一种头尾相接的循环等待资源关系。</p>
<p><strong>二、常见死锁形成的场景</strong></p>
<p><strong>死锁形成的常见情况有以下几种：</strong></p>
<p>1、忘记释放锁：</p>
<p>01void data_process()02{03EnterCriticalSection();04if(/* error happens, forget LeaveCriticalSection */)05return;06LeaveCriticalSection();07}复制代码void data_process(){EnterCriticalSection();if(/* error happens, forget LeaveCriticalSection */)return;LeaveCriticalSection();}</p>
<p>2、单线程重复申请锁：</p>
<p>01void sub_func()02{03EnterCriticalSection();04do_something();05LeaveCriticalSection();06}07void data_process()08{09EnterCriticalSection();10sub_func();11LeaveCriticalSection();12}复制代码void sub_func(){EnterCriticalSection();do_something();LeaveCriticalSection();}void data_process(){EnterCriticalSection();sub_func();LeaveCriticalSection();}</p>
<p>3、多线程多锁申请：</p>
<p>01void data_process1()02{03EnterCriticalSection(&amp;cs1);// 申请锁的顺序有依赖04EnterCriticalSection(&amp;cs2);05do_something1();06LeaveCriticalSection(&amp;cs2);07LeaveCriticalSection(&amp;cs1);08}09void data_process2()10{11EnterCriticalSection(&amp;cs2);// 申请锁的顺序有依赖12EnterCriticalSection(&amp;cs1);13do_something2();14LeaveCriticalSection(&amp;cs1);15LeaveCriticalSection(&amp;cs2);16}复制代码void data_process1(){EnterCriticalSection(&amp;cs1);// 申请锁的顺序有依赖EnterCriticalSection(&amp;cs2);do_something1();LeaveCriticalSection(&amp;cs2);LeaveCriticalSection(&amp;cs1);}void data_process2(){EnterCriticalSection(&amp;cs2);// 申请锁的顺序有依赖EnterCriticalSection(&amp;cs1);do_something2();LeaveCriticalSection(&amp;cs1);LeaveCriticalSection(&amp;cs2);}</p>
<p>4、环形锁申请：</p>
<p>01/* 多个线程申请锁的顺序形成相互依赖的环形：02*             A　-　B03*             |　 　|04*             C　-　D05*/复制代码/* 多个线程申请锁的顺序形成相互依赖的环形：*             A　-　B*             |　 　|*             C　-　D*/</p>
<p><strong>三、死锁的避免策略</strong></p>
<p>死锁的代价是非常大的，有时候很难检测排查，因此需要在编程过程中尽可能的避免发生死锁。编程中为了避免死锁应该遵循如下策略：</p>
<p>1、在编写多线程程序之前，首先编写正确的程序，然后再移植到多线程。</p>
<p>2、时刻检查自己写的程序有没有在跳出时忘记释放锁。</p>
<p>3、如果自己的模块可能重复使用一个锁，建议使用嵌套锁。</p>
<p>4、对于某些锁代码，不要临时重新编写，建议使用库里面的锁，或者自己曾经编写的锁。</p>
<p>5、如果某项业务需要获取多个锁，必须保证锁的按某种顺序获取，否则必定死锁。</p>
<p>6、编写简单的测试用例，验证有没有死锁。</p>
<p>7、编写验证死锁的程序，从源头避免死锁。</p>
<p>上文便是多线程死锁的原因和幸免策略，死锁在一组进程中的各个进程均占有不会释放的资源，但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态，在编程过程中根据线程逻辑进行操作，将可以有效果避免多线程死锁的发生。</p>

<p><img src="https://www.gxjlyf.com/postviews/884158.png" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>关于多进程和多线程的区别是什么</title>
		<link>https://www.gxjlyf.com/863331.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Sun, 27 Nov 2022 03:24:42 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[多线程]]></category>
		<category><![CDATA[进程]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/863331.html</guid>

					<description><![CDATA[多进程和多线程的区别是什么？此前小编给大家介绍了进程和线程的区别，那么大家知道多进程和多线程的区别又是什么吗？ ...]]></description>
										<content:encoded><![CDATA[<p><strong>多进程和多线程的区别是什么？</strong>此前小编给大家介绍了进程和线程的区别，那么大家知道多进程和多线程的区别又是什么吗？它们分别有什么优缺点？为了解决大家的疑惑，小编特地为大家整理了以下教程，希望对大家有所帮助。</p>
<p><img decoding="async" alt="多进程和多线程的区别是什么？多进程和多线程的优缺点分析" src="https://dz.cwhello.com/wp-content/uploads/2022/11/20221127032440-6382d8788cfc2.jpg" /></p>
<p><strong>前言：</strong></p>
<p>多进程，Windows 应用程序中消息有两种送出途径；直接和排队。Windows或某些运行的应用程序可直接发布消息给窗口过程，或者，消息可送到消息列象连续不断轮询消息队列的OS中当前执行的每个进程都 事件驱动程序不是由事件的顺序来控制，而是由事件的发生来控，而事件的发生是随机的、不确定的，这就允许程序的用户用各种合理的顺序来安排程序的流程。</p>
<p>多线程（英语：multithreading），是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程，进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理（Chip-level multithreading）或同时多线程（Simultaneous multithreading）处理器。［1］ 在一个程序中，这些独立运行的程序片段叫作&ldquo;线程&rdquo;（Thread），利用它编程的概念就叫作&ldquo;多线程处理（Multithreading）&rdquo;。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程（台湾译作&ldquo;执行绪&rdquo;），进而提升整体处理性能。</p>
<p><strong>一、多进程和多线程的区别是什么？</strong></p>
<p>在Linux下编程多用多进程编程少用多线程编程。</p>
<p>IBM有个家伙做了个测试，发现切换线程context的时候，windows比linux快一倍多。进出最快的锁（windows2k的 critical section和linux的pthread_mutex），windows比linux的要快五倍左右。当然这并不是说linux不好，而且在经过实际编程之后，综合来看我觉得linux更适合做high performance server，不过在多线程这个具体的领域内，linux还是稍逊windows一点。这应该是情有可原的，毕竟unix家族都是从多进程过来的，而 windows从头就是多线程的。</p>
<p>如果是UNIX/linux环境，采用多线程没必要。</p>
<p>多线程比多进程性能高？误导！</p>
<p>应该说，多线程比多进程成本低，但性能更低。</p>
<p>在UNIX环境，多进程调度开销比多线程调度开销，没有显著区别，就是说，UNIX进程调度效率是很高的。内存消耗方面，二者只差全局数据区，现在内存都很便宜，服务器内存动辄若干G，根本不是问题。</p>
<p>多进程是立体交通系统，虽然造价高，上坡下坡多耗点油，但是不堵车。</p>
<p>多线程是平面交通系统，造价低，但红绿灯太多，老堵车。</p>
<p>我们现在都开跑车，油（主频）有的是，不怕上坡下坡，就怕堵车。</p>
<p>高性能交易服务器中间件，如TUXEDO，都是主张多进程的。实际测试表明，TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的，与UNIX同宗，应该是对UNIX理解最为深刻的，他们的意见应该具有很大的参考意义。</p>
<p><strong>二、多进程和多线程的优缺点分析：</strong></p>
<p><strong>多进程：</strong></p>
<p><strong>多进程优点：</strong></p>
<p>1、每个进程互相独立，不影响主程序的稳定性，子进程崩溃没关系；</p>
<p>2、通过增加CPU，就可以容易扩充性能；</p>
<p>3、可以尽量减少线程加锁/解锁的影响，极大提高性能，就算是线程运行的模块算法效率低也没关系；</p>
<p>4、每个子进程都有2GB地址空间和相关资源，总体能够达到的性能上限非常大。</p>
<p><strong>多进程缺点：</strong></p>
<p>1、逻辑控制复杂，需要和主程序交互；</p>
<p>2、需要跨进程边界，如果有大数据量传送，就不太好，适合小数据量传送、密集运算 多进程调度开销比较大；</p>
<p>3、最好是多进程和多线程结合，即根据实际的需要，每个CPU开启一个子进程，这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题&hellip;&hellip;</p>
<p>4、方法和手段是多样的，关键是自己看起来实现方便有能够满足要求，代价也合适。</p>
<p><strong>多线程：</strong></p>
<p><strong>多线程的优点：</strong></p>
<p>1、无需跨进程边界；</p>
<p>2、程序逻辑和控制方式简单；</p>
<p>3、所有线程可以直接共享内存和变量等；</p>
<p>4、线程方式消耗的总资源比进程方式好。</p>
<p><strong>多线程缺点：</strong></p>
<p>1、每个线程与主程序共用地址空间，受限于2GB地址空间；</p>
<p>2、线程之间的同步和加锁控制比较麻烦；</p>
<p>3、一个线程的崩溃可能影响到整个程序的稳定性；</p>
<p>4、到达一定的线程数程度后，即使再增加CPU也无法提高性能，例如Windows Server 2003，大约是1500个左右的线程数就快到极限了（线程堆栈设定为1M），如果设定线程堆栈为2M，还达不到1500个线程总数；</p>
<p>5、线程能够提高的总性能有限，而且线程多了之后，线程本身的调度也是一个麻烦事儿，需要消耗较多的CPU。</p>
<p>今天说说多进程和多线程的区别就给大家介绍到这里了，还蒙在鼓里的伙伴，赶紧看看以上教程吧！相信你会有所收获！</p>

<p><img src="https://www.gxjlyf.com/postviews/863331.png" /></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>今天分享Win10如何使用Robocopy多线程功能来加快文件复制</title>
		<link>https://www.gxjlyf.com/858719.html</link>
		
		<dc:creator><![CDATA[bafang18]]></dc:creator>
		<pubDate>Sat, 26 Nov 2022 03:23:00 +0000</pubDate>
				<category><![CDATA[PC教程]]></category>
		<category><![CDATA[多线程]]></category>
		<category><![CDATA[文件]]></category>
		<guid isPermaLink="false">https://www.chuwenyu.com/858719.html</guid>

					<description><![CDATA[Win10如何使用Robocopy多线程功能来加快文件复制？我们在操作电脑的过程中，免不了需要使用文件复制功能 ...]]></description>
										<content:encoded><![CDATA[<p><strong>Win10如何使用Robocopy多线程功能来加快文件复制？</strong>我们在操作电脑的过程中，免不了需要使用文件复制功能，如果是小批量移动文件倒还好说，如果大批量移动文件，速度就非常慢了，那么有什么好办法吗？这里给大家推荐Robocopy多线程功能，通过命令行工具我们可以大大的加快文件复制速度，具体的使用方法请看下文介绍。</p>
<p><img decoding="async" alt="Win10如何使用Robocopy多线程功能来加快文件复制？" src="https://dz.cwhello.com/wp-content/uploads/2022/11/20221126032257-6381869182abb.jpg" /></p>
<p><strong>前言：</strong></p>
<p>Robocopy（Robust File Copy，强大的文件复制），这是一个内置于Win10中的命令行工具，它提供了更多功能来帮助用户更快地将数据移动到不同的位置。</p>
<p>之前小编一直使用 xcopy，在才无意中发现了Robocopy也内置到Win10中了。</p>
<p>Robocopy 最为特殊也经常被忽略的是其支持多线程的能力，允许我们同时复制多个文件，而不像在「文件管理器」中复制文件时只能一次一个（移动多个文件时也只是列队之后一个一个移动）。</p>
<p>下面小编就为大家介绍在Win10中如何使用Robocopy 的多线程副本功能来加快文件和文件夹的复制、移动传输过程。</p>
<p><strong>如何使用Robocopy多线程特性？</strong></p>
<p>如果你要将Win10中的大量文件和文件夹复制到另一个驱动器，可以仿照如下步骤来实现 Robocopy 多线程功能以达到超快的数据复制速度：</p>
<p>1、以管理员权限打开「命令提示符」</p>
<p>2、执行类似如下命令进行多线程复制：</p>
<p>Robocopy C:sourcefolderpath D:destinationfolderpath /S /ZB /R:5 /W:5 /V /MT:32</p>
<p>例如：</p>
<p>Robocopy D:Pictures桌面主题 E:桌面主题 /S /ZB /R:5 /W:5 /V /MT:32</p>
<p><img decoding="async" alt="Win10如何使用Robocopy多线程功能来加快文件复制？" src="https://dz.cwhello.com/wp-content/uploads/2022/11/20221126032258-63818692131d6.jpg" /></p>
<p><img decoding="async" alt="Win10如何使用Robocopy多线程功能来加快文件复制？" src="https://dz.cwhello.com/wp-content/uploads/2022/11/20221126032258-63818692aeb2e.jpg" /></p>
<p>注意：请自行将源路径和目标路径替换成你自己的。</p>
<p><strong>Robocopy命令行用法解释：</strong></p>
<p>Robocopy 的功能非常强大，因此其命令行开关也非常之多，下面我们只列出能够可靠、快速复制文件的常用开关。</p>
<p>/S &mdash; 复制子目录，但不复制空的子目录。</p>
<p>/E &mdash; 复制子目录，包括空的子目录。</p>
<p>/Z &mdash; 在可重新启动模式下复制文件。</p>
<p>/ZB &mdash; 使用可重新启动模式；如果拒绝访问，请使用备份模式。</p>
<p>/R:5 &mdash; 失败副本的重试次数： 默认为 1 百万。</p>
<p>/W:5 &mdash; 两次重试间的等待时间： 默认为 30 秒。</p>
<p>/TBD &mdash; 等待定义共享名称（重试错误 67）。</p>
<p>/NP &mdash; 无进度 &ndash; 不显示已复制的百分比。</p>
<p>/V &mdash; 生成详细输出，同时显示跳过的文件。</p>
<p>/MT:32 &mdash; 使用 n 个线程进行多线程复制（默认值为 8）。必须至少为 1，但不得大于 128。</p>
<p>上述命令中最为重要的开关就是 /MT，它让 Robocopy 能够以多线程模式进行复制传输。如果你没为 /MT设置数字，那么默认数字是 8，这意味着Robocopy将会同时复制 8 个文件。小编个人推荐使用 32 个线程，虽然可开的线程可以更多，但数字越大，所使用的系统资源和带宽就越多。</p>
<p>以上便是Win10使用Robocopy多线程功能来加快文件复制的操作教程，如果你的工作，需要经常大批量移动文件，不妨试试Robocopy多线程功能。</p>

<p><img src="https://www.gxjlyf.com/postviews/858719.png" /></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
