同步与事务 -试谈"问题的问题"的解决方案

本文深入探讨了为什么大多数程序员难以成为架构师的原因,重点在于理解语义层次的重要性而非仅仅关注机器层面的问题。通过对比同步与事务在数据完整性的解决方式,强调了语义级问题解决的必要性。进一步阐述了函数式编程(FP)如何在某种程度上对编程者、用户和计算负责,以及其相较于状态式编程的优势。

面向对象编程有两个问题要解决: 一是多线程(注意不是并发), 一是语义环境. 但实际上第一个问题也可以归到第二个问题中去一起解决. 因为多线程本身并不是真正的问题, 真正的问题自始至终是语义意义上的问题.

要是一件东西语义上没有问题, 为什么我要去理会它? 为什么我要去解决它?

如果我有三个对象A, B, C. 这三个对象组成我的状态. 那么有两种办法解决它的数据完整性问题:

1, 同步;

2, 事务.

同步指使用synchronized或者锁来同步所有对它们的访问. 但是如果是事务, 它就可以不同步. 因为它会通过缓存的方式解决数据的冲突问题. 最后可能会有些事务失败, 如果不是选择完全可序列化的事务级别的话.

同步是语义相关的. 不是变量相关的. 同步的时候不能只看着机器或者说内存状态, 你要盯着的是语义状态. 语义状态的意思是, 也许本来在代码上毫不相关的两个东西, 但是它们在语义上是有联系的, 是受彼此约束的, 或者说共同组成另一个状态. 这样子的话, 你的同步就可能 不受线程安全的控制, 会满天飞, 飞得到处都是.

这样子,你怎么办?

所以说JAVA的语义层次要尽快提上来. 使用机器是最大的问题. 所有的同步, 锁根本不可能解决问题, 你要解决语义级的问题, 就必须真的去尝试解决它. 你变成再怎样的机器高手, 也没有用.

问题就是问题. 问题有问题的特征, 解决它要用问题相关的手段而不是机器相关的手段. 机器相关的手段只能解决机器的问题, 解决不了问题的问题.

设想你有一个完全的语义系统, 程序写起来会有多么轻松.

从这个角度讲, FP不是一件坏事, 至少他做到了部分意义上的负责. 对程序员负责, 对用户负责, 对计算负责. 总之它负责了一些东西. 相对于状态式编程 中的直接把机器丢给客户, 丢给程序员的做法, 它"要脸"多了.

那些看我博客的人, 你们还是不要看了. 我建议你们不要看. 我这个人很蠢, 说的话也很蠢, 不像你们那么高科技. 所以不要丢你的脸, 也不要丢你自己的脸(看一个比自己更差的人的东西, 是不是丢脸啊).

我就从来只看比我写得更好的东西. 除非有时候需要抄点东西. 但我敢承认 我抄东西, 我已经看清楚的东西, 我就不愿意花时间去弄来弄去, 我就喜欢直接COPY. 因为我在乎的不是做法, 而是方法.

所以你不要看啦, 再也不要看啦. 求求你啦!

转载于:https://my.oschina.net/digerl/blog/97060

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值