1.WINDOWS操作系统中可以允许最大的线程数是怎样的?
默认情况下,一个线程的栈要预留1M的内存空间 而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程 但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。
你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程。 如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程。
即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制。 比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用的还是2GB。
如果是同一台机器内的话,能起多少线程也是受内存限制的。每个线程对象都要站用非页面内存,而非页面内存也是有限的,当非页面内存被耗尽时,也就无法创建线程了。
如果物理内存非常大,同一台机器内可以跑的线程数目的限制值会越来越大。 在Windows下写个程序,一个进程Fork出2000个左右线程就会异常退出了,为什么? 这个问题的产生是因为windows32位系统,一个进程所能使用的最大虚拟内存为2G,而一个线程的默认线程栈StackSize为1024K(1M),这样当线程数量逼近2000时,2000*1024K=2G(大约),内存资源就相当于耗尽。
MSDN原文: “The number of threads a process can create is limited by the available virtual memory。 By default, every thread has one megabyte of stack space。
Therefore, you can create at most 2,028 threads。 If you reduce the default stack size, you can create more threads。
However, your application will have better performance if you create one thread per processor and build queues of requests for which the application maintains the context information。 A thread would process all requests in a queue before processing requests in the next queue。”
如何突破2000个限制? 可以通过修改CreateThread参数来缩小线程栈StackSize,例如 #define MAX_THREADS 50000 DWORD WINAPI ThreadProc( LPVOID lpParam ){ while (1){ Sleep(100000); } return 0; } int main() { DWORD dwThreadId[MAX_THREADS]; HANDLE hThread[MAX_THREADS]; for(int i = 0; i 建议如下: The "one thread per client" model is well-known not to scale beyond a dozen clients or so。 If you're going to be handling more than that many clients simultaneously, you should move to a model where instead of dedicating a thread to a client, you instead allocate an object。
(Someday I'll muse on the duality between threads and objects。) Windows provides I/O completion ports and a thread pool to help you convert from a thread-based model to a work-item-based model。
1。 Serve many clients with each thread, and use nonblocking I/O and level-triggered readiness notification 2。
Serve many clients with each thread, and use nonblocking I/O and readiness change notification 3。 Serve many clients with each server thread, and use asynchronous I/O -------------------- 附:Win32将低区的2GB留给进程使用, 高区的2GB则留给系统使用。
Linux将高位1GB留给内核,低位3GB留给进程。
2.win10怎么设置最大处理器状态
1、如下图,鼠标右键点击Windows10桌面左下角的win徽标,在弹出的右键菜单中点击“控制面板”:
2、如下图,右上角“查看方式”选择“小图标”,再点击“电源选项”:
3、如下图,选择“高性能”,即可使cpu始终维持100%最高频率:
4、如果要手动调整cpu工作状态,可以点击“更改计划设置”→“更改高级电源设置”:
下拉看到“处理器电源管理”这项,可以修改设置“最小处理器状态”,将“最小处理器状态”改为“100%”后,处理器也会始终维持100%最高频率:
3.修改线程数提高OneDrive上传速度有哪些技巧?
实现原理:和限制Windows系统的并发连接数一样,微软默认也限制了OneDrive的上传线程数,这就在某种程序上限制了OneDrive的上传速度。
当然,最终的上传速度与你的网络环境有很大关系,但是如果你的带宽足够大,此方法还是有明显的效果的。修改方法:Win + R快捷键调出运行对话框 ,输入以下命令:%localappdata%\Microsoft\OneDrive\settings\Personal\global.ini回车运行即可打开OneDrive的配置文件global.ini,在首行加入以下代码: = 2数值可以设置为1 - 3,Win10小编这里中庸之道取了2,最后保存即可。
4.Win10系统如何用Robocopy多线程功能加快文件复制
如果你要将Win10中的大量文件和文件夹复制到另一个驱动器,可以仿照如下步骤来实现 Robocopy 多线程功能以达到超快的数据复制速度: 1、以管理员权限打开「命令提示符」 2、执行类似如下命令进行多线程复制:Robocopy C:\source\folder\path\ D:\destination\folder\path\ /S /ZB /R:5 /W:5 /V /MT:32例如:Robocopy D:\Pictures\桌面主题 E:\桌面主题 /S /ZB /R:5 /W:5 /V /MT:32注意:请自行将源路径和目标路径替换成你自己的。
Robocopy命令行用法解释:Robocopy 的功能非常强大,因此其命令行开关也非常之多,下面我们只列出能够可靠、快速复制文件的常用开关。/S 复制子目录,但不复制空的子目录。
/E 复制子目录,包括空的子目录。/Z 在可重新启动模式下复制文件。
/ZB 使用可重新启动模式;如果拒绝访问,请使用备份模式。/R:5 失败副本的重试次数: 默认为 1 百万。
/W:5 两次重试间的等待时间: 默认为 30 秒。/TBD 等待定义共享名称(重试错误 67)。
/NP 无进度 不显示已复制的百分比。 /V 生成详细输出,同时显示跳过的文件。
/MT:32 使用 n 个线程进行多线程复制(默认值为 8)。必须至少为 1,但不得大于 128。
上述命令中最为重要的开关就是 /MT,它让 Robocopy 能够以多线程模式进行复制传输。如果你没为 /MT设置数字,那么默认数字是 8,这意味着Robocopy将会同时复制 8 个文件。
推荐使用 32 个线程,虽然可开的线程可以更多,但数字越大,所使用的系统资源和带宽就越多。
5.如何修改最大连接数为1
我们经常要使用网络中的多台计算机处理同一个事情,那么就会遇到计算机(Win200、WinXP SP2系统)超出最大网络连接数的问题,大家知道,为了防范蠕虫病毒的传播和攻击,Win2000、Windows XP SP2等系统将并发线程最多限制为10个(正常状态下无法修改)。
SP2利用Messages动态链接库,来实时监控每个进程的并发线程数目,一旦它发现某进程的线程数超过10个,就会屏蔽掉部分线程。这样,虽然可以防范一些蠕虫病毒的攻击,加强系统安全,但是也为我们的正常使用带了一些负面影响。
我们可以采取以下对策,来突破TCP并发连接数,从而提高Win2000、WinXP SP2系统的最大连接数问题。一、注册表修改法(对Win2000系统有效)为了突破计算机网络最大连接数的限制,网上曾经流传过一种修改注册表的方法,操作步骤如下:单击"开始"/运行,输入Regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的"TcpNumConnections"的键值,将之由10改为150,即设置TCP最大并发连接数为150。
(但本方法对WinXP SP2系统无效)二、使用工具来替换Tcpip.Sys(适用于WinXP SP2系统)方法是修改Windows XP SP2的系统文件Tcpip.sys。Tcpip.sys是Windows XP SP2重要的系统文件,位于"C:\Windows\system32\drivers目录下。
该文件由于平时受到系统保护,所以正常情况下你是无法替换它的,必须在安全模式或纯DOS模式下才能替换,建议你使用以下专门工具(EVID)、来替换"Tcpip.sys"文件。操作步骤如下:请从"高师主页_万州教研信息技术专家工作室"(/gjzh)或其它网站下载替换工具(EVID),用它来修改系统文件Tcpip.sys最大安全并发连接限制;修改前,请一定备份您计算机的C:\Windows\system32\drivers\Tcpip.sys文件,以防不测。
接下来,双击打开下载文件ZIP压缩包,运行其中的替换工具EvID4226Patch.exe,随之将弹出一个命令行提示符窗口,首先显示Windows当前的Tcpip.sys文件版本,以及并发连接的限制数值(默认为10);接着询问你是否将连接数限制在50(如下图1),你可以选择"Yes/No/Change",如果你输入"Y",则会将并发连接数改为"50",如果想改为其他数(例如150),可以在提示符后输入"c",然后输入最大的并发连接数(例如150)回车,最后在提示符下输入"Y"并回车,这样就替换了Tcpip.sys文件;Tcpip.sys文件被替换后,随之会弹出系统文件保护对话框,你可以点击"取消"按钮,然后点击"是"按钮,重新启动后,Tcpip.sys文件的替换就大功告成了。现在你的最大并发连接数已超过10个,达到了150个,因此Windows XP SP2的多线程访问速度得到了提升,当你用FlashGet、BT等多线程下载时,就不会感到网络带宽的限制了。
三、DOS下修改Tcpip.sys文件以上替换程序EvID4226Patch.exe也可以在DOS下使用,方法是:首先把EvID4226Patch.exe拷贝到C盘根目录下;然后再进入DOS模式,进入C盘根目录,输入命令EvID4226Patch/L=$n$/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可修改Tcpip.sys文件。注意:以上$n$为你要设置的最大安全连接数,假如要把最大并发连接数设置为150个线程,那么输入命令EvID4226Patch/L=150/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可。
特别提示:以上几种方法虽然提高了Windows XP SP2的多线程访问速度,但却降低了SP2的安全性能,如果你的电脑感染了病毒或木马,过多地启用新线程,会加速病毒和木马的蔓延,因此你在追求网络最大连接数的同时,也要注意网络安全。建议你及时安装升级杀毒软件和防火墙,如果是普通用户,可以利用上面的方法,将TCP最大并发连接数设置为10~30。
这个网站是我找到的,是有效的:。
转载请注明出处windows之家 » win10设置最大线程数