This topic created in 2028 days ago, the information mentioned may be changed or developed.
在 Java 中, 有对象, 和线程这两个概念, 对象虽然有数据和形为, 但对象本身不能执行, 要使用线程来执行.
俺感受这和现实中的对象不匹配, 现实中有行为的对象一般都是可自运行的(比如说人)
也就是现实中, 对象和执行对象的线程在绑定在一起的.
Java 中编程模型和现实的不匹配导致写多线程程序时, 总是感觉不那么直观. 比如总要想这个对象的代码是在哪个线程中执行的.
有没有那种库或语言可以把执行环境和对象进行绑定的啊...
19 replies • 2021-01-15 11:04:55 +08:00
 |
|
1
wysnylc Jan 14, 2021
谁说现实里对象和执行对象的线程在绑定在一起,我用泡面碗泡茶不可以吗?
|
 |
|
2
lewis89 Jan 14, 2021
面向对象发明跟流行的时候,多核 CPU 还在工程师的美好憧憬中,Python 的 GIL 到现在都没去除呢,想那么多干嘛
|
 |
|
3
acmore Jan 14, 2021
"对象本身的执行" 在现实中也不存在,程序应该类比于人的 DNA,现实中 DNA 一样不能自己运行,需要人这个载体来执行,人就是线程。"执行" 这个概念本身就是有执行能力的使动方执行某种可执行的规范,代码是规范,线程是运行起来的规范,这一切都非常自然。
达到 "把执行环境和对象进行绑定" 这种效果在 Java 中就可以做,把执行逻辑和 Executor 放一起就好了,然后外部调用。计算机中不存在一个对象天然地就能执行,这是操作系统的基础:代码只是块设备中的字节而已,总要有进程和线程来执行它。
|
 |
|
4
TypeError Jan 14, 2021 via Android
golang 啊,一个 go 关键词自动创建 goroutine 调度后台运行, 不用自己思考太多,除非存在数据同步需要用 channel 或者锁
|
 |
|
5
Kirsk Jan 14, 2021 via Android 1
假设对象与线程绑定 是不是一线程一对象 楼主说的执行环境更像是上下文 本质不还是对象吗
|
 |
|
7
secondwtq Jan 14, 2021
你说的不是 Actor Model 么 ...
|
 |
|
8
kaneg Jan 14, 2021 via iPhone
貌似 golang 的 go 关键词是你想要的东西:语法层面提供异步执行的能力。
|
 |
|
10
cs419 Jan 14, 2021
想这个对象的代码是在哪个线程中执行的 ?? 摸摸脑袋,没看懂
这里说 Java 中 对象 要由线程来执行 那么 哪个语言中 对象不是由线程来执行
|
 |
|
11
xuanbg Jan 15, 2021
面向对象本来很简单,就是逻辑和数据统一嘛,挺好的。结果呢,非要把自己搞成形而上学,导致问题一大堆。
|
 |
|
12
340244120w Jan 15, 2021 via iPhone
脏读 换读 重复读 不就是现实里的问题咩。。 不过,你也可以程序限制成只有一条线程执行,就完全能和你以为的现实生活对应上了。
|
 |
|
13
watzds Jan 15, 2021 via Android
现实中,对象挺难找的
|
 |
|
14
jorneyr Jan 15, 2021
有没有那种库或语言可以把执行环境和对象进行绑定的啊...
Qt 就是这么做的,这才真的难受,一不小心就把程序搞崩溃了!
|
 |
|
15
ychost Jan 15, 2021
来个 async/await 语法就不会这么想了
|
 |
|
16
passerbytiny Jan 15, 2021 via Android
现实中有行为的对象一般都是可自运行的(比如说人) —— 这种人是具有高度自我管理能力的人,把它放到办公桌前(甚至都不用放,给个眼神就行)它就会自启动工作模式。
你确定存在上面那种“人”?
执行对象的线程,本身就是对象,它们只是分工不同的对象,并不是割裂的两种东西。Java 里面线程就是用对象抽象的,我不知道楼主是怎么得出第一段那个对线程的看法的。
|
 |
|
17
no1xsyzy Jan 15, 2021
说到 Actor model Pony 是面向对象的 actor model 异步 对象里可以定义 method 和 behavior behavior 一旦调用就会建立新的…… “线程” —— 如果你高兴这么叫的话
|
 |
|
18
acmore Jan 15, 2021
即使是 Actor 或者是 CSP 模型也一样,你写的代码只是被运行的规范,背后还是会有一堆执行者(操作系统线程)来运行这些规范。
|