io

Can anybody explain GHC's definition of IO?

∥☆過路亽.° 提交于 2020-11-28 07:56:59
问题 The title is pretty self-descriptive, but there's one part that caught my attention: newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)) Stripping the newtype , we get: State# RealWorld -> (# State# RealWorld, a #) I don't know what State# stands for. Can we replace it with State like this: State RealWorld -> (State RealWorld, a) And can that be expressed as this, then? State (State RealWorld) a This particular construct caught my attention. I know that conceptually, type IO a =

Java I/O 模型的演进

混江龙づ霸主 提交于 2020-11-27 04:54:55
原文同步至 http://waylau.com/java-io-model-evolution/ 什么是同步?什么是异步?阻塞和非阻塞又有什么区别?本文先从 Unix 的 I/O 模型讲起,介绍了5种常见的 I/O 模型。而后再引出 Java 的 I/O 模型的演进过程,并用实例说明如何选择合适的 Java I/O 模型来提高系统的并发量和可用性。 由于,Java 的 I/O 依赖于操作系统的实现,所以先了解 Unix 的 I/O 模型有助于理解 Java 的 I/O。 相关概念 同步和异步 描述的是用户线程与内核的交互方式: 同步 是指用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行; 异步 是指用户线程发起 I/O 请求后仍继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。 阻塞和非阻塞 描述的是用户线程调用内核 I/O 操作的方式: 阻塞 是指 I/O 操作需要彻底完成后才返回到用户空间; 非阻塞 是指 I/O 操作被调用后立即返回给用户一个状态值,无需等到 I/O 操作彻底完成。 一个 I/O 操作其实分成了两个步骤:发起 I/O 请求和实际的 I/O 操作。 阻塞 I/O 和非阻塞 I/O 的区别在于第一步,发起 I/O 请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞 I/O ,如果不阻塞

java 打包jar,配置文件无法读取

泄露秘密 提交于 2020-11-01 14:50:01
通常方法: InputStream is = XXX.class .getResourceAsStream("../resources/system.properties"); 由于打包时候,配置文件无法跟随一起打包jar,程序运行会报错。 解决方法: String rootPath = System.getProperty("user.dir").replace("\\", "/"); FileInputStream in = new FileInputStream(rootPath + "/resources/system.properties"); 读取运行的jar路径,然后再读取同级目录下的配置文件。 来源: oschina 链接: https://my.oschina.net/u/3172055/blog/1629503