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.为什么电脑进程中会出现很多占内存的iexplor.exe 急!!!
楼主你好,由于很久不用IE了,所以并不是太清楚,简单给你说说吧。我记得,貌似每运行一个IE,它的进程都是独立的,也就是你每打开一个,就会多出一个进程来。但是貌似是以前旧版本的才是这样的啊,我可以确定的是IE7以前的都是这样的,以后的很少用,还真没注意这个问题……
还有,你说你把所有的都关了还有这个进程? 那排除延时的可能的话就是中毒了,现在很多人经常把病毒什么的的名字设置成系统常用软件的名字以混淆视听……
还有,你确定没有看错啊,要知道还有一个进程的名字是explorer.exe! 至于杀毒软件杀不出来,可以很负责任的告诉你,其实很多病毒在你的电脑中运行的,杀毒软件根本就查不出来。因为每个病毒在被释放出来之前都会做免杀,做完免杀的病毒最少可以躲避百分之十的杀毒软件的查杀,这里我说的是最简单的免杀,高手做的免杀躲过所有的杀毒软件也不是不可能的! 所以,告诉你一点,我的独门秘籍!只要保证你的系统启动项和服务项里没有病毒,那么你就是裸奔的没事! 如果病毒是从启动项服务项那面启动的,那你最好找个电脑高手给你亲自弄一下,电脑高手是可以发现病毒的,如果找不到的话,那可以尝试换几个杀毒软件进行查杀,或许能查出来。 对了,还有个容易忽略的地方,我也经常忘,那就是开始里的那个启动文件夹!这年代啥变态病毒都有,我上次就被折腾了半天。注意,查看的时候最好用DOS命令查看,不会的话就去把文件夹属性里的不显示隐藏文件的勾去掉,把显示系统文件的勾打上,然后再去查看。因为……我想你明白的。
3.笔记本电脑一般后台运行多少程序算是正常的?我是W7旗舰版的系
一、进程是操作系统结构的基础,是一个正在执行的程序,进程是程序在计算机上的一次执行活动。
它包括二部份,一是系统自动运行项,二是使用中打开的运行项。进程多,占用资源就多。
在进程中还有一个入侵者那就是木马病毒侵入,一旦木马病毒侵入,它会大量占用系统资源,造成电脑运行迟缓或无法运行。 一般开机进程XP在20上下,Vista、Win7在30个上下。
二、想减少进程 在任务管理器中可以直接删除,但下次启动时还会自动运行。这么办: 1、减少自动运行项,禁用多余的服务组件 。
右键单击“我的电脑(计算机)”--“管理”--“服务和应用程序”--“服务”,在右窗格将不需要的服务设为禁用,将不经常使用的服务设为手动。 2、去掉一些开机启动项。
(1)开机启动项一般只保留两项即可。开始-运行-msconfig-启动-保留“Ctfmon(提供语言识别……和其他用户输入技术)”和“杀毒程序”(或360时实监控),其它一律删除。
如果想开机自动上网,保留宽带连接。 删除了不是卸载了,而是不让它开机自动运行,需要运行时,手动打开就是了。
(2)借助软件取消开机自动运行 WIN7优化大师 打开优化大师--系统优化--开机速度化--在启动列表中-勾选开机不自动启动的项目-优化-退出,重启。 360安全卫士 打开360-功能大全-开机加速-启动项-在“设置启动方式”中将不需要启动的,设置为“禁止启动”。
3、随时关闭不使用的应用程序。 三、如果怀疑木马病毒侵入 从网上下载360安全卫士,打开360安全卫士-功能大全-选用“电脑优化”中的“进程管理”,在打开“正在运行”窗口,以列表的形式显示正在运行的:软件名称、CPU占用、内存占用、安全和操作。
你可以查看哪个进程不正,或是多余的,可通过“操作”结束它的运行。在进程中删除只是暂时结束它的运行,并不是从你电脑中清除,重启它还会自动运行。
在进程中发现有木马病毒,要用木马病毒软件全盘查杀才能将它清除。 。
4.一开机暴增至200多个进程
进程文件: cmd 或者 cmd。
exe 进程名称: Windows Command Prompt 描述: cmd。exe是微软Windows系统的命令行程序,类似与微软的DOS操作系统。
cmd。exe是一个32位的命令行程序,运行在Windows NT/2000/XP上。
这不是纯粹的系统程序,但是如果终止它,可能会导致不可知的问题。 你这可能中了trojan类木马,病毒体 C:\winnt 目录下logo1_。
exe 。 请先去把系统设置为“显示隐藏文件”,因为病毒以隐藏属性伪装,不做此设置将无法看到它,设置的方法如下 打开“我的电脑”; 依次打开菜单“工具/文件夹选项”; 然后在弹出的“文件夹选项”对话框中切换到“查看”页; 去掉“隐藏受保护的操作系统文件(推荐)”前面的对钩,让它变为不选状态; 在下面的“高级设置”列表框中改变“不显示隐藏的文件和文件夹”选项为“显示所有文件和文件夹”选项; 去掉“隐藏已知文件类型的扩展名”前面的对钩,也让它变为不选状态; 最后点击“确定”。
二、修改注册表 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping\ i\boot] winlogo 项 把WINLOGO 项 后面的C:\WINNT\SWS32。 DLL 干掉(就是删掉的意思^_^) 接下来把HKEY_LOCAL_MACHINE]SOFTWARE/Microsoft/Windows/CurrentVersion/Run 键中 /RunOnce/RunOnceEx 两个中其中有个是也是 C:\WINNT\SWS32。
dll 把类似以上的全部删掉 注意不要删除默认的键值(删了的话后果自负) 三 结束进程 按“Ctrl+Alt+Del”键弹出任务管理器,找到SWS32 进程,名字记不大清楚了,反正看到最多的进程就杀杀杀!!!!还有几个很少看到的进 程。 什么AUS***之类的都干掉他。
找到EXPL0RER。EXE进程(注意第5个字母是数字0不是字母O),找到它后选中它并点击“结束进程”以结束掉 木马进程。
然后迅速做下面一步,只所以要迅速是因为如果动作慢的话,木马可能会自动恢复而再次运行起来,这样就无法删除掉其他木马文 件了(如果EXPL0RER。 EXE进程再次运行起来需要重做这一步)。
四 装杀毒软件 装完后不要重新启动(切记)直接升级病毒库,升级完后,把C:\winnt 目录下所有带毒文件删除。然后运行杀毒软件开始杀毒。
杀完后。还有几个杀毒软件无法删掉的东西要把名字记下来。
因为不同的系统有不同的名字。所以这里说不清楚了。
自己记下来。 重新启动后再次杀毒。
记的把可疑的进程的结束。否则杀毒软件无法干净杀毒。
还有最重要的一点记的把杀毒软件无法清除的病毒设置为删除 文件。一般要重复杀毒3-5次才能杀干净。
五。看看杀毒后的系统。
缺少的了很多系统文件。系统处于危险状态。
如果你有GHOST 备份。这个时候恢复一下。
系统可以干净无损。如果没有请运行 SFC 命令检查 文件系统。
具体操作为 运行-输入CMD 命令进入DOS 提示符。-输入SFC /scannow -- 提示放入系统光盘。
--放进去吧。然后慢慢等。
看看成果。杀毒效果显著。
毒杀干净了。但是杀完毒后很多游戏都玩不了。
忙了一圈都不知道自己在忙什么。郁闷吧。
然后重新做系统吧。
转载请注明出处windows之家 » win10电脑最多开几个进程几个线程