1,资源争用保护

对于文件操作、界面资源、GDI操作等一般由主线程完成的任务,要加以顺序化处理(serialization),即一个资源一次只能由一个线程访问,多个线程同时访问将导致错误。

方法一般可采用TRTLCriticalSection,程序启动时创建TRTLCriticalSection实例,退出时释放实例,使用时先调用EnterCriticalSection,再调用LeaveCriticalSection

2,线程执行的异常处理

线程中的异常可能导致线程死在内存中无法释放,积累多了会导致资源耗尽。

因此对线程中执行的操作,一般要考虑异常处理。通常是用Try...Except 对可疑操作进行包裹,避免错误逸出。

        try
res := API_call(p1,p2);
except //重要:防止函数调用出错,线程死掉不能释放!!
on e:exception do
addLog(,e.Message);
end;

3,线程释放

windows程序每个进程可以创建的线程数是有限的。本人win7 64位机器,程序最多创建的线程数不超过1500个。如果程序要创建的线程数超过最大线程数,系统就会报错。

一般程序不需要在内存中创建并运行太多线程。线程不足可能是未及时释放导致。因此线程的释放十分关键。

1,线程创建时设定 FreeOnTerminate为True,则线程执行完毕后系统会自动释放线程资源。

2,保障线程及时执行完毕execute过程。特别是注意不能出错,或出错后不进行处理。

实践发现,线程的释放时机是windows决定的。当程序可用线程足够且较忙时,即使线程已经结束,系统可能也并不马上释放线程资源,而是在空闲时缓慢释放。

但如果程序占用的线程已经达到1500左右,且又要创建新的线程时,系统就会主动去释放已经结束的线程,以便为新线程提供资源。

下图是测试启动10000个线程,发现当程序进程到达1460个线程时,程序会主动释放已结束的线程,此时线程数不再上升,且程序正常运行。

4,多线程的测试

对于多线程程序一定要进行自动化测试,因为人工测试难以模拟到一些涉及多线程特性的问题。

实践发现,Jmeter是一个非常好用的多线程压力测试工具,做好测试计划可反复使用,用法也较为简单。在此推荐一下。

最新文章

  1. 聊聊Unity项目管理的那些事:Git-flow和Unity
  2. mysql时间段内查询
  3. visual studio 2005 常用按键
  4. 《2016ThoughtWorks技术雷达峰会----js爆炸下的技术选型》
  5. Servlet练习
  6. [codeforces 293]B. Distinct Paths
  7. 使用jquery的小记
  8. Spring实例化bean的三种方法
  9. 封装JDBC:实现简单ORM框架lfdb
  10. sql sever 随机查询
  11. [SVG] Simple introduce for SVG
  12. XCode工程内多Targets
  13. Java之继承深刻理解
  14. JavaScript 区分中英文字符的两种方法: 正则和charCodeAt()方法
  15. http options 请求
  16. (原)visual studio 2015中添加dll路径
  17. Jmeter登录后Session自动共享与多线程组并行
  18. css3 min-content,max-content,fit-content, fill属性
  19. Java包、类、数据类型、表达式和标识符
  20. linux远程拷贝命令-scp

热门文章

  1. 条款八: 写operator new和operator delete时要遵循常规
  2. 百度编辑器ueditor给上传的图片加入水印
  3. 5 shell命令之tr
  4. NPOI2.2.0.0实例详解(十)—设置EXCEL单元格【文本格式】 NPOI 单元格 格式设为文本 HSSFDataFormat
  5. web 开发之js---js 实现文本高亮
  6. 简单脱壳教程笔记(7)---手脱PECompact2.X壳
  7. go11---方法method
  8. 获取view宽高
  9. 8. Ext文本输入框:Ext.form.TextField属性汇总
  10. 第2章 微信小程序的基础组件学习