duangsuse::Echo
714 subscribers
4.24K photos
127 videos
583 files
6.46K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from dnaugsuz
那么你说的异步是什么? Promise 或 callback ?
Forwarded from iseki 萍水相逢,相聚是缘|菜到开始学习
当然我的上下文中 线程 明确的指java.lang.Thread
Forwarded from dnaugsuz
你上面的意思大概是说可以用调度器,本身线程也是操作系统内核调度接口的抽象而已

我的意思是,如果真的只是按顺序操作,没有事件进来,异步和多线程也能存在,Reactive 也能用,但没有任何意义,所以说没有多线程不用异步任务
Forwarded from dnaugsuz
之前记得是有 java.util.collection 这个包的,后来发现是把 java.util.concurrentkotlin.collection 记混了 😂 #Haha
Forwarded from dnaugsuz
上面的意思是,我觉得不应该有任务调度器而都是 delay 回调嵌套的形式,毕竟这样没有额外修饰

即便有调度器,coroutine 的 suspend() 感觉比较没意思,因为 Int 量 i 是通过闭包存住的,既然是这样调度任务的话也就可以理解了
Forwarded from dnaugsuz
我是不理解 Kotlin 到底是如何改进 coroutine 的既有特性的,在我的认知里协程就是能 suspend/resume 的普通程序而已,实现上就是 C#/ TypeScript ES6 的状态机化,但 Kotlin 显然不止于此。

delay 的话,如果只是避免回调地狱的 CPS 变换是肯定做不到预期的顺序的(会卡住其它协程的执行),一般的理解肯定是多线程,我是没想到 Kotlin 的协程还绑上了调度器特性,这么说它的 delay() 完全可以有特殊处理,相当于全局 timer 了
如果当前 dispatcher 没有实现 Delay, kotlin 会使用自己提供的 Delay, 那里头有个线程
Forwarded from dnaugsuz
这样也的确可以,但你的调度器必须实现抢占式调度啊,分配时间片结束得取得执行权🤔
这个就不得不依赖硬件的 timer 中断了
然后任务还要能保护现场、恢复现场,像个小协程 #coroutine 一样

要不然一个任务卡死了,调度也炸了

所以说平常还是不考虑用户级线程的情况比较好,都是谈操作系统的 Process和LWP
Forwarded from dnaugsuz
你说的有道理,异步和并发是隔离的概念,虽然多线程库会提供异步接口,也有异步接口是不需要其它(JVM/OS)线程的,尽管这个概念在工业界经常被混淆

毕竟谁会真的拿应用线程去请求系统异步资源,慢慢异步就等于在其它线程调度了,唉
dnaugsuz
你说的有道理,异步和并发是隔离的概念,虽然多线程库会提供异步接口,也有异步接口是不需要其它(JVM/OS)线程的,尽管这个概念在工业界经常被混淆 毕竟谁会真的拿应用线程去请求系统异步资源,慢慢异步就等于在其它线程调度了,唉
刚才想了一会,觉得我们作为 编译原理/事件 的程序员,对并发的认知太薄弱了

认识不到线程是什么,一直觉得就是程序运行时始终存在、不会销毁的东西,它的任务完成后就直接变成 IDLE 状态等待事件,所以可以在异步信号来的时候能处理。
或者说一直就只有处理器I/O中断的那个认知,觉得就是不管什么程序序列(想了一下并行又没有顺序),肯定能抢占式执行而已。

想想也真是荒谬,如果线程在运行,它上面可能调度注册好的异步信号处理器?即便可以,那线程的独立性又有何意义?直接新建一个去执行不就好了?

所以说有事件队列啊,也不是说 event loop 是一个很难弄的东西,真的不甘心,我一直以为除了算法和绘制交互,自己已经了解的足够多(也不是没写过,两次。),其实还是什么都不懂。
Forwarded from dnaugsuz
噢,我明白了,其实是我一直不认为单线程用消息处理循环算是异步

我觉得异步是 IO 层面的(所以说浏览器JS也算多线程),这样的话肯定会有另外的程序流程(不管是不是内核里)在进行,共享了消息队列,不然它也不会莫名增长

这样的话异步就一定有其它线程了,除非IO中断打断了某线程后它还能恢复。

https://t.me/dsuse/15037

……想了想线程又名 LWP 好像的确是可以中断恢复( libc 的 signal(int, sighandler_t),这样的话单线程也能异步,感觉好绕。
Forwarded from Phonograph (Ralph 萌新喵)
终于明白「640K 内存能满足所有用户的需求」这个梗里面的「640K」是咋来的了。
在 DOS 环境下,0000:0000~9000:FFFF 是用户可用的内存空间,共640K.
Forwarded from Phonograph (Ralph 萌新喵)
用 8086 汇编打了个 ASCII 码表
挺好玩的
#C :

#include <stdio.h>
void main(int argc, char** argv) {
for (int i=0; i<0xFF; i++) printf("%c%d", i, i);
}

也可以用 fputc:

void put(int i) {
fputc(stdout, (char) i);
int acc=i; while (acc!=0) {
fputc(stdout, '0'+acc%0xF);
acc /= 0xF;
}
}

这是横向的,当然也可以纵向:

void putTable(int nmax_col) {
int n=0xFF/nmax_col, m=nmax_col;
char ascii[n][m];
for (int j=0; j<m; j++) for (int i=0, i<n, i++) {
ascii[i][j] = (char)j*m+i;
}
for (int i=0, i<n, i++) for (int j=0; j<m; j++) {
char v=ascii[i][j]; printf("%c%d", v,v);
}
}

#asm
.db fmt "%c%d\00"

_main:
push rbp
mov rbp, rsp
sub rsp, 4
mov [rbp-4], 0xFF

for:
mov rax, [rbp-4]
push rax
push rax
push fmt
call printf
dec rax
mov [rbp-4], rax
jnz for

for_out:
add rsp, 4
pop rbp
ret
你只能用 readline 什么的操纵虚拟终端的接口啦…… 感觉输换行不可移植
Forwarded from AlPlank (Al Pt)
https://t.me/XJBFW/5028
(Java里没有靠谱的清除屏幕的接口,只能执行clear/cls指令或靠回车物理清屏幕…)
Forwarded from 层叠 - The Cascading
上次是 GitHub [1],这次是 GitLab——有伊朗开发者表示自己近几天无法访问 GitLab,而最近连自己的 GitLab 账户都被封禁。由于政策原因,客服甚至无法暂时解除封禁以让他进行数据迁移。

不止 GitLab 受美国的禁运政策限制阻断了伊朗用户的访问,包括 Google Developers、Docker Hub、Golang、Kubernetes 等一系列开源企划的官方网站都阻断了来自伊朗的访问。

src: https://news.ycombinator.com/item?id=24886102

1. https://techcrunch.com/2019/07/29/github-ban-sanctioned-countries/
#Github 🤔
Forwarded from 层叠 - The Cascading
github/dmca#8142 被删除。
以及不知为何,有一小段时间 GitHub 将 github/dmca 识别成了 youtube-dl2/youtube-dl 的 fork。

https://web.archive.org/web/20201028040229/https://github.com/github/dmca