既然Thread质疑声一片,为什么它仍能够存在呢?原因有:
(1)某些应用程序天生就具有并发特性,而且需要共享地址空间和各种资源,比如数据库服务器。
(2)进程方案开销大。
(3)Java语言大行其道,使得绝大部分程序员认为并发编程唯一也是最好的方式就是采用多线程,而且在Java语言中创建一个线程非常简单。
对于第二点,只有线程创建,线程同步,线程加锁等开销比进程方案开销小,才会真正获益。只是来个线程创建和进程创建开销的比较,那也太天真了。此处,我认为还要包括开发,维护进程并发程序和线程并发程序两种方式之间的开销对比。毕竟,除了机器时间,人的时间也很宝贵。
对于第三点,Java是不是会在以后考虑另外的并发模式。象建立在JVM之上的Scala语言就在采用Actor模式。多个选择,总是不错的主意。不然搞得我们这些开发人员都去用Thread,使得Thread被过度使用,破坏Thread的名声。
附:如果想了解Thread在哪些方面被广泛批评,请参考如下资料:
(1)《The Art of Unix Programming》的“Threads-Threat or Menace?”
(2)“Why Threads Are a Bad Idea”
(3)“The Problem with Threads”
分享到:
相关推荐
thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread thread ...
AT32使用RT-thread studio 流程
测试Thread中使用Handler修改
嵌入式操作系统RT-Thread的ADC设备使用示例(使用的bsp为rt-thread-v4.0.1版本的stm32f10x-HAL)。 注:rt-thread-v4.0.1\bsp\stm32\stm32f103-fire-arbitrary 可以通过env工具运行menuconfig直接使用ADC设备,使用...
C#Thread后台线程使用
2022年RT-Thread全球技术大会国内专场PPT合集(31份)。 C RTOS中的RUST应用 CherryUSB协议栈的原理与使用 RISCV指令集开源软件生态 ...在RT-Thread中使用栈帧来调试程序 智能家居灯控系统 ART-PI网页控制的实现 等等
第二章 安装步骤及使用事项。 第三章 详细介绍高性能实时内核——ThreadX 的功能操作。 第四章 详细介绍ThreadX 应用程序的接口。 第五章 介绍ThreadX 应用程序的写I/O 驱动程序。 第六章 ThreadX 处理器自带示例...
本资源是我的RT-Thread专栏应用篇《RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread》的工程源码: 一个简单的应用:无线温湿度传感器 一个小内存的芯片:STM32L051C8T6 一个小而美丽的物联网操作系统:RT-Thread ...
Thread和Handle的使用,主线程使用Handle和其他线程通过Message进行通信
rt-thread操作系统 邮箱消息的使用例程,
线程创建,线程等待与清除,thread_clean.c,thread_create.c,thread_create.c,thread_exit_struct.c,thread_id.c,thread_int.c, thread_join.c, thread_join.c, thread_string.c, thread_struct.c
STM32可以有STM32CubeMX轻松移植THreadX,雅特力从AT43F435/437系列开始不能完全兼容STM32,用不了THreadX了。 本移植采用最新(截至2023年3月12号)的AT32F435/437固件库V2.1.2,THreadX版本V6.2.1;依照雅特力官方...
目前RTThread的adc设备驱动采用轮询法,比较浪费资源,且读取麻烦,这是我的某个项目中对RTThread的ADC设备驱动添加DMA方式
对QT中多线程的使用方式moveToThread方法进行剖析,通过新建两种不同的类分别实现moveToThread方法,并通过实例化对象验证该方法。
通过使用Thread后,一个进程可以创建一个或多个线程以执行与该进程关联的部分程序代码。使用 ThreadStart 委托或 ParameterizedThreadStart 委托指定由线程执行的程序代码。使用 ParameterizedThreadStart 委托可以...
赠送jar包:transmittable-thread-local-2.12.1.jar; 赠送原API文档:transmittable-thread-local-2.12.1-javadoc.jar; 赠送源代码:transmittable-thread-local-2.12.1-sources.jar; 赠送Maven依赖信息文件:...
* 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启...
继承Thread类: 1必须重写run 方法:里面放置的实际的线程体 2 启动线程: 3创建Thread对象 4调用Thread对象的start 方法启动线程
Thread.interrupt()方法的使用以及使用它退出线程
在c#如何使用多线程编程,如何有效系统使用效率