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