关于线程的优点描述不正确的是

你好,我认为这个说法的误导部分是“多个线程可以并行执行,以提高程序的运行效率”。

首先,你是对的,多线程是在单处理器系统中并发执行的,而不是并行执行的。
这里的“并发”是指多个线程交替使用处理器的时间段,而不是实际上同时在多个处理器上运行。
只有当系统是多处理器时,即有多个核心或CPU时,线程才能真正并行执行。

那么,提高程序执行效率需要考虑很多条件,比如线程同步开销、上下文切换开销、系统资源限制等等。
你提到的。
这些都是影响计划有效性的重要因素。
例如,如果线程管理不好,太多线程竞争资源,或者线程同步太复杂,都会导致效率降低。

最后,多线程带来了额外的成本,比如编程复杂度增加、调试更加困难以及线程同步和线程安全问题。
这些都是开发者在使用多线程时必须面对和处理的事情。

所以,虽然多线程有潜力提高程序的运行性能,但这并不是绝对的,也不能简单地说“多线程可以提高程序的运行性能”。
这个论点忽略了单处理器系统中线程的并发性以及多线程带来的额外复杂性和开销。
所以这个描述实际上是有误导性的。
不管怎样,这取决于你,但我认为讨论这个话题时我们还是需要具体问题具体分析。

线程越多越好吗?

说白了,线程越多越好。
由于资源有限和交换开销,这变得复杂。

先说最重要的一点:CPU核心数是物理瓶颈。
比如我们去年跑的项目,4 核CPU里塞满了1 00个线程。
结果,CPU利用率只有3 0%,因为线程切换带来了性能下降。
用行话来说,这称为雪崩效应。
事实上,前面的一个小延迟就导致了后面的整个事情的发生。
还有一点就是,线程越多,锁和同步的开销就越可怕。
去年我们测试发现,在 3 ,000 个请求下,当线程数量增加一倍时,响应时间增加了两倍。
还有另一个关键细节。
无论操作系统的调度算法多么智能,如果线程数超过核心数的两倍,就会开始严重抖动。
说实话,这很令人沮丧。

我一开始以为打开更多线程会线性提升性能,但后来发现这是错误的。
当线程数超过 CPU 核心数时,实际吞吐量会随着线程数量的增加而减少。
等等,还有一件事。
还需要考虑内存使用情况。
一个线程栈区域不到几MB,1 00个线程也就几百MB。
这时候,记忆可能会先崩溃。

最后提醒:线程数设置为CPU核心数的1 .5 到2 倍比较合理。
不要盲目地堆砌关卡。

JAVA 的线程这块咋整啊,咋也学不明白啊~~

广义上讲,线程和进程的核心区别在于,进程是操作系统分配资源的基本单位,拥有自己的空闲内存空间;而线程是进程内并发执行的流,共享内存空间但具有独立的堆。
我们先来说说最重要的事情。
去年我们跑的一个高并发项目中,如果直接给每个线程(线程级实体)分配一个数据库连接池(进程级资源),那么当有3 000个请求时,CPU会瞬间跳到9 0%以上。
这用行话来说就是雪崩效应。
事实上,前面的一个小小的延迟就会导致一切都落后。
还有一点就是,线程之间进行协作时,比如使用wait/notify来实现生产者-消费者模型,必须注意同步对象不能随意分配。
我一开始以为新的对象就够了,后来发现错了。
重新分配会导致每个线程锁定不同的对象,这是完全无效的。
等等,还有别的事。
如果继承Thread类,只能使用static来共享数据,这样会使代码结构变得混乱。
这比实现 Runnable 接口来传递对象实例更明显。

建议尝试实现Runnable接口,使用对象实例传递共享数据的参数,并保持同步块尽可能小,以避免全局锁。
说实话,有点混乱。
很多人不重视这一点。