Forwarded from AlPlank (YuutaW @UNIX: 1603519536107)
YuutaW 官方帐号,认准 UNIX 时间戳,前后误差为五秒
Forwarded from AlPlank (YuutaW @UNIX: 1603520370096)
由于 Telegram API 限制,速率改为五分钟一次)
#QQ #statement #dev
顺便说一句,对计算机应用来讲英文还是很重要的。
比如一个凳子可以有什么操作?能搬起(lift up)、坐下(sit down on)、毁掉(destroy),叫别人坐下(mike: sit on it)、搬到某个教室去(move to class1);后两者涉及对另外对象(人(Person)、地点(Place))的指代(refer, reference),就不可能只用一个动词命名了,必须用两三词的短语表达。
对程序部分(是依赖什么变量的什么操作)易读性而言,中文的语序把不重要的词(比如说靠「以」「对」等介词引入的对象)放前面,并不利于速览。
比如:
Alice (waved to us) silently.
爱丽丝默默地(向我们 挥手)。
可以看到中文前置了动词 wave 的参数,在编程里这会导致意图不清晰进而滚雪球式造成问题,是大忌。
所以说对英文语序的熟悉会影响到咱未来的编程能力、会影响到你写出代码的质量和易读性。
我是作为程序设计领域的小萌新给大家这一点建议(强调:不是你们的竞争者,所以不必有抵触心理),网名 duangsuse 。
顺便说一句,对计算机应用来讲英文还是很重要的。
比如一个凳子可以有什么操作?能搬起(lift up)、坐下(sit down on)、毁掉(destroy),叫别人坐下(mike: sit on it)、搬到某个教室去(move to class1);后两者涉及对另外对象(人(Person)、地点(Place))的指代(refer, reference),就不可能只用一个动词命名了,必须用两三词的短语表达。
对程序部分(是依赖什么变量的什么操作)易读性而言,中文的语序把不重要的词(比如说靠「以」「对」等介词引入的对象)放前面,并不利于速览。
比如:
Alice (waved to us) silently.
爱丽丝默默地(向我们 挥手)。
可以看到中文前置了动词 wave 的参数,在编程里这会导致意图不清晰进而滚雪球式造成问题,是大忌。
所以说对英文语序的熟悉会影响到咱未来的编程能力、会影响到你写出代码的质量和易读性。
我是作为程序设计领域的小萌新给大家这一点建议(强调:不是你们的竞争者,所以不必有抵触心理),网名 duangsuse 。
#Kotlin #code #coroutine
提问:为什么结果是 9 downTo 0 ?launch 的里面用了 coroutine 特性,但为什么 main 也是 suspend fun?
如果只是单线程,是怎么在最后才输出第一次的 $i 的?
suspend fun main() = coroutineScope {
for (i in 0 until 10) launch {
delay(1000L - i*10); print("$i ")
}
}
提问:为什么结果是 9 downTo 0 ?launch 的里面用了 coroutine 特性,但为什么 main 也是 suspend fun?
如果只是单线程,是怎么在最后才输出第一次的 $i 的?
Forwarded from dnaugsuz
单线程的话是 1 <sleep 10> 2 <sleep 9> 3 ...
这种形式输出的
这种形式输出的
Forwarded from dnaugsuz
异步本身就是在存在其它线程的情况下才有的啊,不是封装成回调就成全局单线程也有异步了
回调只不过是因为不能卡线程做的变通而已,要不然 WaitCondition 加个锁有何不可
回调只不过是因为不能卡线程做的变通而已,要不然 WaitCondition 加个锁有何不可
Forwarded from iseki 萍水相逢,相聚是缘|菜到开始学习
当然我的上下文中
线程 明确的指java.lang.ThreadForwarded from dnaugsuz
你上面的意思大概是说可以用调度器,本身线程也是操作系统内核调度接口的抽象而已
我的意思是,如果真的只是按顺序操作,没有事件进来,异步和多线程也能存在,Reactive 也能用,但没有任何意义,所以说没有多线程不用异步任务
我的意思是,如果真的只是按顺序操作,没有事件进来,异步和多线程也能存在,Reactive 也能用,但没有任何意义,所以说没有多线程不用异步任务
Forwarded from dnaugsuz
Forwarded from dnaugsuz
上面的意思是,我觉得不应该有任务调度器而都是 delay 回调嵌套的形式,毕竟这样没有额外修饰
即便有调度器,coroutine 的 suspend() 感觉比较没意思,因为 Int 量 i 是通过闭包存住的,既然是这样调度任务的话也就可以理解了
即便有调度器,coroutine 的 suspend() 感觉比较没意思,因为 Int 量 i 是通过闭包存住的,既然是这样调度任务的话也就可以理解了
Forwarded from dnaugsuz
我是不理解 Kotlin 到底是如何改进 coroutine 的既有特性的,在我的认知里协程就是能 suspend/resume 的普通程序而已,实现上就是 C#/ TypeScript ES6 的状态机化,但 Kotlin 显然不止于此。
delay 的话,如果只是避免回调地狱的 CPS 变换是肯定做不到预期的顺序的(会卡住其它协程的执行),一般的理解肯定是多线程,我是没想到 Kotlin 的协程还绑上了调度器特性,这么说它的 delay() 完全可以有特殊处理,相当于全局 timer 了
delay 的话,如果只是避免回调地狱的 CPS 变换是肯定做不到预期的顺序的(会卡住其它协程的执行),一般的理解肯定是多线程,我是没想到 Kotlin 的协程还绑上了调度器特性,这么说它的 delay() 完全可以有特殊处理,相当于全局 timer 了
Forwarded from Raid via @eva_zh_subtitle_bot
如果当前 dispatcher 没有实现 Delay, kotlin 会使用自己提供的 Delay, 那里头有个线程
Forwarded from dnaugsuz
这样也的确可以,但你的调度器必须实现抢占式调度啊,分配时间片结束得取得执行权🤔
这个就不得不依赖硬件的 timer 中断了
然后任务还要能保护现场、恢复现场,像个小协程 #coroutine 一样
要不然一个任务卡死了,调度也炸了
所以说平常还是不考虑用户级线程的情况比较好,都是谈操作系统的 Process和LWP
这个就不得不依赖硬件的 timer 中断了
然后任务还要能保护现场、恢复现场,像个小协程 #coroutine 一样
要不然一个任务卡死了,调度也炸了
所以说平常还是不考虑用户级线程的情况比较好,都是谈操作系统的 Process和LWP
Forwarded from dnaugsuz
你说的有道理,异步和并发是隔离的概念,虽然多线程库会提供异步接口,也有异步接口是不需要其它(JVM/OS)线程的,尽管这个概念在工业界经常被混淆
毕竟谁会真的拿应用线程去请求系统异步资源,慢慢异步就等于在其它线程调度了,唉
毕竟谁会真的拿应用线程去请求系统异步资源,慢慢异步就等于在其它线程调度了,唉
dnaugsuz
你说的有道理,异步和并发是隔离的概念,虽然多线程库会提供异步接口,也有异步接口是不需要其它(JVM/OS)线程的,尽管这个概念在工业界经常被混淆 毕竟谁会真的拿应用线程去请求系统异步资源,慢慢异步就等于在其它线程调度了,唉
刚才想了一会,觉得我们作为 编译原理/事件 的程序员,对并发的认知太薄弱了
认识不到线程是什么,一直觉得就是程序运行时始终存在、不会销毁的东西,它的任务完成后就直接变成 IDLE 状态等待事件,所以可以在异步信号来的时候能处理。
或者说一直就只有处理器I/O中断的那个认知,觉得就是不管什么程序序列(想了一下并行又没有顺序),肯定能抢占式执行而已。
想想也真是荒谬,如果线程在运行,它上面可能调度注册好的异步信号处理器?即便可以,那线程的独立性又有何意义?直接新建一个去执行不就好了?
所以说有事件队列啊,也不是说 event loop 是一个很难弄的东西,真的不甘心,我一直以为除了算法和绘制交互,自己已经了解的足够多(也不是没写过,两次。),其实还是什么都不懂。
认识不到线程是什么,一直觉得就是程序运行时始终存在、不会销毁的东西,它的任务完成后就直接变成 IDLE 状态等待事件,所以可以在异步信号来的时候能处理。
或者说一直就只有处理器I/O中断的那个认知,觉得就是不管什么程序序列(想了一下并行又没有顺序),肯定能抢占式执行而已。
想想也真是荒谬,如果线程在运行,它上面可能调度注册好的异步信号处理器?即便可以,那线程的独立性又有何意义?直接新建一个去执行不就好了?
所以说有事件队列啊,也不是说 event loop 是一个很难弄的东西,真的不甘心,我一直以为除了算法和绘制交互,自己已经了解的足够多(也不是没写过,两次。),其实还是什么都不懂。