网站速度诊断中国北京出啥大事了

news/2025/9/23 4:33:34/文章来源:
网站速度诊断,中国北京出啥大事了,wordpress拨号按钮,深圳网站免费制作1. 进程与线程有那些区别和联系#xff1f;   每个进程至少需要一个线程。 进程由两部分构成#xff1a;进程内核对象#xff0c;地址空间。线程也由两部分组成#xff1a;线程内核对象#xff0c;操作系统用它来对线程实施管理。线程堆栈#xff0c;用于维…1.   进程与线程有那些区别和联系   每个进程至少需要一个线程。         进程由两部分构成进程内核对象地址空间。线程也由两部分组成线程内核对象操作系统用它来对线程实施管理。线程堆栈用于维护线程在执行代码时需要的所有函数参数和局部变量。         进程是不活泼的。进程从来不执行任何东西它只是线程的容器。线程总是在某个进程环境中创建的而且它的整个寿命期都在该进程中。         如果在单进程环境中有多个线程正在运行那么这些线程将共享单个地址空间。这些线程能够执行相同的代码对相同的数据进行操作。这些线程还能共享内核对象句柄因为句柄表依赖于每个进程而不是每个线程存在。   进程使用的系统资源比线程多得多。实际上线程只有一个内核对象和一个堆栈保留的记录很少因此需要很少的内存。因此始终都应该设法用增加线程来解决编程问题避免创建新的进程。但是许多程序设计用多个进程来实现会更好些。 2.   如何使用_beginthreadex函数         使用方法与CreateThread函数相同只是调用参数类型需要转换。 3.   如何使用CreateThread函数         当CreateThread被调用时系统创建一个线程内核对象。该线程内核对象不是线程本身而是操作系统用来管理线程的较小的数据结构。使用时应当注意在不需要对线程内核进行访问后调用CloseHandle函数关闭线程句柄。因为CreateThread函数中使用某些C/C运行期库函数时会有内存泄漏所以应当尽量避免使用。 参数含义 lpThreadAttributes     如果传递NULL该线程使用默认安全属性。如果希望所有的子进程能够继承该线程对象的句柄必须将它的bInheritHandle成员被初始化为TRUE。 dwStackSize     设定线程堆栈的地址空间。如果非0函数将所有的存储器保留并分配给线程的堆栈。如果是0CreateThread就保留一个区域并且将链接程序嵌入.exe文件的/STACK链接程序开关信息指明的存储器容量分配给线程堆栈。 lpStartAddress     线程函数的地址。 lpParameter     传递给线程函数的参数。 dwCreationFlags     如果是0线程创建后立即进行调度。如果是CREATE_SUSPENDED系统对它进行初始化后暂停该线程的运行。 LpThreadId     用来存放系统分配给新线程的ID。 4.   如何终止线程的运行 (1)       线程函数返回最好使用这种方法。 这是确保所有线程资源被正确地清除的唯一办法。如果线程能够返回就可以确保下列事项的实现   在线程函数中创建的所有C对象均将通过它们的撤消函数正确地撤消。操作系统将正确地释放线程堆栈使用的内存。 系统将线程的退出代码设置为线程函数的返回值。系统将递减线程内核对象的使用计数。 (2)       调用ExitThread函数最好不要使用这种方法。 该函数将终止线程的运行并导致操作系统清除该线程使用的所有操作系统资源。但是C资源如C类对象将不被撤消。 (3)         调用TerminateThread函数应该避免使用这种方法。 TerminateThread能撤消任何线程。线程的内核对象的使用计数也被递减。TerminateThread函数是异步运行的函数。如果要确切地知道该线程已经终止运行必须调用WaitForSingleObject或者类似的函数。当使用返回或调用ExitThread的方法撤消线程时该线程的内存堆栈也被撤消。但是如果使用TerminateThread那么在拥有线程的进程终止运行之前系统不撤消该线程的堆栈。 (4)         包含线程的进程终止运行应该避免使用这种方法。由于整个进程已经被关闭进程使用的所有资源肯定已被清除。就像从每个剩余的线程调用TerminateThread一样。这意味着正确的应用程序清除没有发生即C对象撤消函数没有被调用数据没有转至磁盘等等。一旦线程不再运行系统中就没有别的线程能够处理该线程的句柄。然而别的线程可以调GetExitcodeThread来检查由hThread标识的线程是否已经终止运行。如果它已经终止运行则确定它的退出代码。 5.   为什么不要使用_beginthread函数和_endthread函数   与_beginthreadex函数相比参数少限制多。无法创建暂停的线程无法取得线程ID。    Endthread函数无参数线程退出代码必须为0。还有_endthread函数内部关闭了线程的句柄一旦退出将不能正确访问线程句柄。 6.   如何对进程或线程的内核进行引用 HANDLE   GetCurrentProcess(     ); HANDLE   GetCurrentThread(     ); 这两个函数都能返回调用线程的进程的伪句柄或线程内核对象的伪句柄。伪句柄只能在当前的进程或线程中使用在其它线程或进程将不能访问。函数并不在创建进程的句柄表中创建新句柄。调用这些函数对进程或线程内核对象的使用计数没有任何影响。如果调用CloseHandle将伪句柄作为参数来传递那么CloseHandle就会忽略该函数的调用并返回FALSE。 DWORD   GetCurrentProcessId(     ); DWORD   GetCurrentThreadId(     ); 这两个函数使得线程能够查询它的进程的唯一ID或它自己的唯一ID。 7.   如何将伪句柄转换为实句柄 HANDLE   hProcessFalse     NULL; HANDLE   hProcessTrue     NULL; HANDLE   hThreadFalse     NULL; HANDLE   hThreadTrue     NULL; hProcessFalse     GetCurrentProcess(     ); hThreadFalse     GetCurrentThread(     ); 取得线程实句柄 DuplicateHandle(   hProcessFalse,   hThreadFalse,   hProcessFalse,   hThreadTrue,   0,   FALSE,   DUPLICATE_SAME_ACCESS   ); 取得进程实句柄 DuplicateHandle(   hProcessFalse,   hProcessFalse,   hProcessFalse,   hProcessTrue,   0,   FALSE,   DUPLICATE_SAME_ACCESS   ); 由于DuplicateHandle会递增特定对象的使用计数因此当完成对复制对象句柄的使用时应该将目标句柄传递给CloseHandle从而递减对象的使用计数。 8.   在一个进程中可创建线程的最大数是得多少 线程的最大数取决于该系统的可用虚拟内存的大小。默认每个线程最多可拥有至多1MB大小的栈的空间。所以至多可创建2028个线程。如果减少默认堆栈的大小则可以创建更多的线程。 线程的调度、优先级和亲缘性 9.   如何暂停和恢复线程的运行       线程内核对象的内部有一个值指明线程的暂停计数。当调用CreateProcess或CreateThread函数时就创建了线程的内核对象并且它的暂停计数被初始化为1。因为线程的初始化需要时间不能在系统做好充分的准备之前就开始执行线程。线程完全初始化好了之后CreateProcess或CreateThread要查看是否已经传递了CREATE_SUSPENDED标志。如果已经传递了这个标志那么这些函数就返回同时新线程处于暂停状态。如果尚未传递该标志那么该函数将线程的暂停计数递减为0。当线程的暂停计数是0的时候除非线程正在等待其他某种事情的发生否则该线程就处于可调度状态。在暂停状态中创建一个线程就能够在线程有机会执行任何代码之前改变线程的运行环境如优先级。一旦改变了线程的环境必须使线程成为可调度线程。方法如下 hThread     CreatThread(   ……CREATE_SUSPENDED……   ); 或 bCreate     CreatProcess(   ……CREATE_SUSPENDED……pProcInfo   ); if(   bCreate   !   FALSE   ) {   hThread     pProcInfo.hThread; } …… …… …… ResumeThread(   hThread   ); CloseHandle(   hThread   ); ResumeThread成功它将返回线程的前一个暂停计数否则返回0xFFFFFFFF。 单个线程可以暂停若干次。如果一个线程暂停了3次它必须恢复3次。创建线程时除了使用CREATE_SUSPENDED外也可以调用SuspendThread函数来暂停线程的运行。任何线程都可以调用该函数来暂停另一个线程的运行只要拥有线程的句柄。线程可以自行暂停运行但是不能自行恢复运行。与ResumeThread一样SuspendThread返回的是线程的前一个暂停计数。线程暂停的最多次数可以是MAXIMUM_SUSPEND_COUNT次。SuspendThread与内核方式的执行是异步进行的但是在线程恢复运行之前不会发生用户方式的执行。调用SuspendThread时必须小心因为不知道暂停线程运行时它在进行什么操作。只有确切知道目标线程是什么或者目标线程正在做什么并且采取强有力的措施来避免因暂停线程的运行而带来的问题或死锁状态SuspendThread才是安全的。 10.   是否可以暂停和恢复进程的运行         对于Windows来说不存在暂停或恢复进程的概念因为进程从来不会被安排获得CPU时间。不过Windows确实允许一个进程暂停另一个进程中的所有线程的运行但是从事暂停操作的进程必须是个调试程序。特别是进程必须调用WaitForDebugEvent和ContinueDebugEvent之类的函数。由于竞争的原因Windows没有提供其他方法来暂停进程中所有线程的运行。 11.   如何使用sleep函数         系统将在大约的指定毫秒数内使线程不可调度。Windows不是个实时操作系统。虽然线程可能在规定的时间被唤醒但是它能否做到取决于系统中还有什么操作正在进行。   可以调用Sleep并且为dwMilliseconds参数传递INFINITE。这将告诉系统永远不要调度该线程。这不是一件值得去做的事情。最好是让线程退出并还原它的堆栈和内核对象。可以将0传递给Sleep。这将告诉系统调用线程将释放剩余的时间片并迫使系统调度另一个线程。但是系统可以对刚刚调用Sleep的线程重新调度。如果不存在多个拥有相同优先级的可调度线程就会出现这种情况。 12.   如何转换到另一个线程         系统提供了SwitchToThread函数。当调用这个函数的时候系统要查看是否存在一个迫切需要CPU时间的线程。如果没有线程迫切需要CPU时间SwitchToThread就会立即返回。如果存在一个迫切需要CPU时间的线程SwitchToThread就对该线程进行调度该线程的优先级可能低于调用SwitchToThread的线程。这个迫切需要CPU时间的线程可以运行一个时间段然后系统调度程序照常运行。该函数允许一个需要资源的线程强制另一个优先级较低、而目前却拥有该资源的线程放弃该资源。如果调用SwitchToThread函数时没有其他线程能够运行那么该函数返回FALSE否则返回一个非0值。调用SwitchToThread与调用Sleep是相似的。差别是SwitchToThread允许优先级较低的线程运行而即使有低优先级线程迫切需要CPU时间Sleep也能够立即对调用线程重新进行调度。 13.   如何取得线程运行的时间 (1)       简单取得线程大概运行时间 DWORD   dwStartTime     0; DWORD   dwEndTime     0; DWORD   dwRunTime     0; dwStartTime     GetTickCount(     ); …… …… …… dwEndTime     GetTickCount(     ); dwRunTime     dwEndTime   –   dwStartTime; (2)         调用GetThreadTimes的函数 参数含义 hThread   线程句柄 lpCreationTime   创建时间英国格林威治时间 lpExitTime   退出时间英国格林威治时间如果线程仍然在运行退出时间则未定义 lpKernelTime   内核时间指明线程执行操作系统代码已经经过了多少个100ns的CPU时间 lpUserTime   用户时间指明线程执行应用程序代码已经经过了多少个100ns的CPU时间 GetProcessTimes是个类似GetThreadTimes的函数适用于进程中的所有线程甚至是已经终止运行的线程。返回的内核时间是所有进程的线程在内核代码中经过的全部时间的总和。GetThreadTimes和GetProcessTimes这两个函数在Windows98中不起作用。在Windows98中没有一个可靠的机制可供应用程序来确定线程或进程已经使用了多少CPU时间。 14.   进程的优先级类有哪些 优先级类   标识符   描述 实时           REALTIME_PRIORITY_CLASS   立即对事件作出响应执行关键时间的任务。会抢先于操作系统组件之前运行。 高            HIGH_PRIORITY_CLASS   立即对事件作出响应执行关键时间的任务。 高于正常         ABOVE_NORMAL_PRIORITY_CLASS   在正常优先级与高优先级之间运行Windows2000。 正常           NORMAL_PRIORITY_CLASS   没有特殊调度需求 低于正常         BELOW_NORMAL_PRIORITY_CLASS   在正常优先级与空闲优先级之间运行Windows2000。 空闲           IDLE_PRIORITY_CLASS   在系统空闲时运行。 设置方法 BOOL   SetPriorityClass(   HANDLE   hProcess,   DWORD   dwPriority   ); DWORD   GetPriorityClass(   HANDLE   hProcess   ); 使用命令外壳启动一个程序时该程序的起始优先级是正常优先级。如果使用Start命令来启动该程序可以使用一个开关来设定应用程序的起始优先级。例如 c:\ START   /LOW   CALC.EXE Start命令还能识别/BELOWNORMAL、/NORMAL、/ABOVENORMAL、/HIGH和/REALTIME等开关。 15.   线程的相对优先级有哪些 相对优先级   标识符   描述 关键时间         THREAD_PRIORITY_TIME_CRITICAL   对于实时优先级类线程在优先级31上运行对于其他优先级类线程在优先级15上运行。 最高           THREAD_PRIORITY_HIGHEST   线程在高于正常优先级上两级上运行。 高于正常         THREAD_PRIORITY_ABOVE_NORMAL   线程在正常优先级上一级上运行。 正常           THREAD_PRIORITY_NORMAL   线程在进程的优先级类上正常运行。 低于正常         THREAD_PRIORITY_BELOW_NORMAL   线程在低于正常优先级下一级上运行。 最低           THREAD_PRIORITY_LOWEST   线程在低于正常优先级下两级上运行。 空闲           THREAD_PRIORITY_IDLE   对于实时优先级类线程在优先级16上运行对于其他优先级类线程在优先级1上运行。 设置方法 BOOL   SetThreadPriority(   HANDLE   hThread,   DWORD   dwPriority   ); DWORD   GetThreadPriorityClass(   HANDLE   hThread   ); 16.   如何避免系统动态提高线程的优先级等级   系统常常要提高线程的优先级等级以便对窗口消息或读取磁盘等I/O事件作出响应。或者当系统发现一个线程在大约3至4s内一直渴望得到CPU时间它就将这个渴望得到CPU时间的线程的优先级动态提高到15并让该线程运行两倍于它的时间量。当到了两倍时间量的时候该线程的优先级立即返回到它的基本优先级。下面的函数可以对系统的调度方式进行设置 BOOL   SetProcessPriorityBoost(   HANDLE   hProcess,   BOOL   bDisableBoost   ); BOOL   GetProcessPriorityBoost(   HANDLE   hProcess,   PBOOL   pbDisableBoost   ); BOOL   SetThreadPriorityBoost(   HANDLE   hThread,   BOOL   bDisableBoost   ); BOOL   GetThreadPriorityBoost(   HANDLE   hThread,   PBOOL   pbDisableBoost   ); SetProcessPriorityBoost负责告诉系统激活或停用进行中的所有线程的优先级提高功能而SetThreadPriorityBoost则激活或停用各个线程的优先级提高功能。Windows98没有提供这4个函数的有用的实现代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站页面设计论文长沙做网站最好的公司

摘要:CSS 过渡效果是一种常见的美观技术,用于在元素状态变化时平滑地过渡。本文将详细介绍 CSS 过渡效果的语法、属性、使用场景以及实现动画效果的步骤。 一、CSS 过渡效果概述 CSS 过渡效果是一种改变元素属性的视觉效果,使得从一个状态到另…

简述网站设计基本流程外贸建站 台州

关于自定义循环队列的实现原理和要点可以参见之前的博文系列:循环队列及C语言实现。这里主要对JAVA下的具体实现方式与原理进行说明。 一、JAVA 中已经自带了 Queue、DQueue、ArrayList、LinkedList 等常用的数据结构,为什么还要单独实现循环队列&#…

淄博 网站设计小鸟云WordPress数据库连接

背景:用nohup运行jar包时候,会产生大量的日志文件,影响磁盘存储,生产环境大概1天有30个g 解决方案: 1、用split分割日志,代码在下面(可以先测试一下),然后加入到定时任务…

常德自助建站seo哈尔滨怎样快速建站

现象: 在CodeFirst时,先写字段与表,创建数据库后,再添加内容 但字段与表会变更,比如改名删除增加等 需求: 当表字段变更时,同时变更数据库,执行数据库迁移 核心命令 Add-Migrat…

什么是 网站收录广州申请公司注册网站

738.单调递增的数字 思路:要求一个数字从第一位往后的大小是单调递增的,先把数字转换成字符串,然后从后往前逐位遍历,如果当前位比前一位小,则前一位--,从当前位往后都应该为9,因此记下当前位置…

html做的网页怎么变成网站手机商城网站建设策划方案范文

汇编概述 汇编需要学习的大致框架如下: 汇编中的符号 1.指令;能够北嘁肷梢惶?2bit机器码,并且能够被cpui识别和执行 2.伪指令:本身不是指令,编译器可以将其替换成若干条指令 3.伪操作:不会生成指令…

网站怎么产品做推广做暧暧网站在线看

Python3判断是否为回文数原题 https://leetcode-cn.com/problems/palindrome-number/ 题目: 不允许用str的方法! 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。…

基于 Vite7 与 Vue3 的 WebOS 后台系统架构实践

在数字办公场景日益复杂的今天,企业级后台系统对交互体验与开发效率提出更高要求。我们采用 Vite7+Vue3+ArcoDesign 技术组合,构建出兼具 MacOS 与 Windows 双风格的 WebOS 管理系统模板,为 PC 端后台开发提供全新解…

网站优化流程网站备案幕

代码随想录算法训练营Day47 | 198.打家劫舍 213.打家劫舍II 337.打家劫舍III LeetCode 198.打家劫舍 题目链接&#xff1a;LeetCode 198.打家劫舍 思路&#xff1a; 当前打劫或者不打劫 class Solution { public:int rob(vector<int>& nums) {vector<int>…

网站建设和推广电话销售话术王也图片高清头像

在前几篇笔记之中都是使用的GPIO输出功能&#xff0c;还没有用过GPIO输入功能&#xff0c;本章就来学习一下如果在Linux下编写GPIO输入驱动程序。正点原子STM32MP1开发板上有三个按键&#xff0c;就使用这些按键来完成GPIO输入驱动程序&#xff0c;同时利用原子操作来对按键值进…

广东网站设计公司电话h5应用

图片来源&#xff1a;https://cn.bing.com本文系生物谷原创编译&#xff0c;欢迎分享&#xff0c;转载须授权&#xff01;研究人员发现了一种直接将皮肤细胞重新编程成用于视觉的光敏杆状感光器的技术。实验室制造的杆状体使失明的老鼠能够在细胞移植到眼睛后探测到光线。这项研…

哪里有做旅游包车的网站智慧新零售系统

用一张图详细的描述DNS寻址的过程&#xff0c;是高级前端进阶的网络篇&#xff1a; 主要是第三步要记仔细就行啦&#xff0c;每一步都要详细的记录下来&#xff0c;总结的脉络如下&#xff1a; 本地DNS缓存本地DNS服务器根域名服务器 顶级域名服务器再次顶级域名服务器权威域名…

滨江区高端网站建设优化推广方案

上周我们学习了如何使用元素创建SVG文本。在实例中我们设置了x和y坐标来定位文本&#xff0c;也尝试了给SVG文本中的每个字符定位。关于元素还有很多内容。在处理SVG文本时&#xff0c;不要局限于x和y属性。元素还有几个可以添加的属性&#xff0c;现在我们开始讨论吧。dx和dy属…

重庆有哪些做网站公司做网站怎么样引流

身为一位产品经理或设计师&#xff0c;原型设计工具是必不可少的工作伙伴。但我们难免会遇到预算有限的时候&#xff0c;这时候&#xff0c;去哪里寻找一款好用的免费原型设计工具呢&#xff1f;以下&#xff0c;小编为大家精心挑选了7款免费的原型工具&#xff0c;并对其进行了…

手表 网站策划常德市建设工程造价信息网

前言 在安装好anaconda之后&#xff0c;系统默认就安装好了一个jupyter notebook的工具&#xff0c;该工具可以在网页端运行&#xff0c;类似这样&#xff1a; 提供了一个按行运行的python运行环境&#xff0c;每一步的输出都可以打印到界面&#xff0c;对于我们初学python&am…

爱站关键词挖掘软件wordpress d压缩

引言 在现代应用程序开发中&#xff0c;确保数据库操作的完整性和一致性至关重要。MySQL 提供了强大的事务管理功能&#xff0c;允许开发者以原子性、一致性、隔离性和持久性&#xff08;ACID&#xff09;的方式处理数据。本文将通过详细的解释和实际示例&#xff0c;带你深入…

网站的购物车怎么做检查网站是否做网站地图

杜教筛 1.概述 杜教筛是用以解决积性函数前缀和的算法。 在学习了莫比乌斯反演之后&#xff0c;杜教筛的过程就会显得简单而自然。 2.基本形式 对于积性函数&#xff0c;我们定义如下函数&#xff1a; 构造积性函数 &#xff0c;使得 显然 &#xff1a; 进一步转化&#xf…

青浦做网站价格网站代码500

企业级 文件传输加密应用 简历一直在投&#xff0c;一直无音讯&#xff0c;今天我又从硬盘里翻出一个 好玩的加密软件&#xff0c;这个是 2017年的时候和荷兰某世界500强公司合作的小项目。 今天分享给大家 。 文章目录 企业级 文件传输加密应用1.目的2.软件介绍3.下载好 安装…

房山网站建设公司wordpress管理工具栏

在互联网时代&#xff0c;IP地址的重要性不言而喻。作为网络通信的基础&#xff0c;IP地址用于标识每一台连接到互联网的设备。然而&#xff0c;传统的IP地址定位方式仅能粗略地确定设备的大致位置&#xff0c;无法实现精确定位。那么&#xff0c;IP地址能否实现精确定位呢&…

怎样建设淘客网站app开发流程

chrono是C11中新加入的时间日期操作库&#xff0c;可以方便地进行时间日期操作&#xff0c;主要包含了&#xff1a;duration, time_point, clock。 时钟与时间点 chrono中用time_point模板类表示时间点&#xff0c;其支持基本算术操作&#xff1b;不同时钟clock分别返回其对应…