Go-互斥锁的实现

Mutex 数据结构 1 2 3 4 type Mutex struct { state int32 sema uint32 } Mutex 使用过之后是不可被拷贝的 state 等于 0 值的时候才是无锁的状态 sema 字段为信号量字段,通过该字段控制协程的阻塞和唤醒,具体实现在runtime 中。 Mutex 对象总共有三个公开方法 Lock 尝试抢占互斥锁,如果已经被锁定,则调用协程进入阻塞 TryLock Unlock 解除互斥锁, 解锁未锁定的互斥锁会发生panic Mutex 与协程无法关,允许一个协程锁定,另一个协程进行解锁。 Mutex 实现了一个 sync.Locker 接口, 该接口只有两个方法 Lock Unlock Mutex 锁有几种状态 mutexLocked = 1 已经锁定 mutexWoken = 2 表示当前锁的等待队列,有协程正在活跃地获取锁,可以考虑不用释放信号量 mutexStarving = 4 当前锁已经进入了饥饿状态 其他常量 mutexWaiterShift = 3 统计的等待在Mutex.state字段等待数量。(前3位,用于表示锁的状态, 即 mutexLocked, mutexWoken, mutexStarving) starvationThresholdNs = 1e6 进入饥饿模式的阈值 1ms Mutex 锁的竞争方式 Mutex 锁有两种状态 ...

<span title='2022-05-29 20:52:35 +0800 +0800'>May 29, 2022</span>&nbsp;·&nbsp;4 min&nbsp;·&nbsp;潜水员

富兰克林自传读后感

富兰克林自传 富兰克林, 美国独立宣言的签署者之一,白手起家致富,发明了避雷针路灯,组织了社区消防队,写下了《富兰克林自传》,一个丰富多产的人生。 年少时勤奋读书,诚信独立,中年时勤勉奋斗,注重自身美德修养。又积极参与社会活动。 摘录富兰克林十三美德: 节制:食不过饱,饮酒不醉; 寡言:言必于人于己有益,避免无益的聊天; 生活:每一样东西应有一定的安放地方;每件日常事物当有一定的时间去做; 决心:当做必做;决心要做的事应坚持不懈; 俭朴:用钱必须于人或于己有益,换言之,切戒浪费; 勤勉:不浪费时间;每时每刻做些有用的事,戒掉一切不必要的行动; 诚恳:不欺骗人;思想要纯洁公正;说话也要如此; 公正:不做损人利己的事;不要忘记履行对人有益而又是你应尽的义务; 适度:避免极端;人若给你应得的处罚,你当容忍之; 清洁:身体、衣服和住所力求清洁; 镇静:勿因小事或普遍不可避免的事故而惊慌失措; 贞节:除了为了健康或生育后代起见,不常进行房事,切戒房事过度,伤害身体或损害你自己及他人的安宁或名誉; 谦虚:仿效耶稣和苏格拉底。

<span title='2022-05-25 23:14:12 +0800 +0800'>May 25, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

【翻译】使用 Godoc 给 go 代码添加文档

在看官方文档的时候,突然心血来潮,想翻译一下一篇博客玩玩。 原文章地址 Godoc: documenting Go code Go 语言官方对于代码的文档非常重视,文档对于软件的可阅读性和可维护性有着至关重要的地位。当然,文档必须要是准确可理解的,也需要易于编写和维护。理性情况下,文档应该与代码紧密联系。这样子才能方便于程序员修改和编写。 所以,我们开发了 godoc 文档工具。本文描述了的 godoc 关于的“文档”的方法论,和解释如何按照使用规范给你自己的项目写出一个好的文档。 godoc 会解析源文件代码和注释,生成基于HTML的页面或者纯文本格式的文档。这样子文档就与代码紧密联系。举个例子,通过在 godoc 的页面点击,你就可以在一个函数的文档说明和源代码中快速跳转。 godoc 在概念上与 Python 的“Docstring”和 Java 的“Javadoc"相似,但是 godoc 设计的更加简单化。godoc 读取的代码注释的不需要特定的结构化(Docstring 使用),也不需要特定的语法(JavaDoc 使用),godoc 从代码读取的注释就是简单的“代码注释”,就算你不使用 godoc 也可以直接阅读的注释。 使用的规范很简单:在类型,变量,常量,函数,包声明的上方写下注释即可, 中间不要有空行。godoc 会把这些注释以文字的形式呈现在被注释的对象旁边。举个例子,下方就是 fmt 包的Fprint函数的注释。 1 2 3 4 // Fprint formats using the default formats for its operands and writes to w. // Spaces are added between operands when neither is a string. // It returns the number of bytes written and any write error encountered. func Fprint(w io.Writer, a ...interface{}) (n int, err error) { 值得注意的是该注释是以被注释的对象命名开头的一个完整的句子。 这个使用规范可以方便我们生成各种各样的格式文档,从简单的纯文本到 UNIX 是 man 的帮助页,还可以使用其他工具更见简单地获取到信息, 比如提取出第一行或者句子。 ...

<span title='2022-05-25 16:11:10 +0800 +0800'>May 25, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

IP表示中 / 代表的意思

IP 中斜杠表示的是子网掩码的位数 例如 202.118.130.0/24 表示 子网页码的位数有24位,即 1111.1111.1111.0000

<span title='2022-05-23 22:01:03 +0800 +0800'>May 23, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Hugo 如何使用已经发布文章做为相对URL

hugo 的默认内容都是在 content/ 路径下方 在 markdown 文章中使用 { {< ref "/blog/my-first-post.md" >}}(两个左花括号中间是没有空格的), 会在编译时发生地址替换, 带/ 是表示从 content/ 目录下的下一个绝对路径 1 [我的文章]({ {< ref "/blog/my-first-post.md" }}) 记得是已经发布的文章, 如果使用不存在, 或者是不参加发布的草稿文章就会发生报错 hugo官方文档

<span title='2022-05-15 16:33:13 +0800 +0800'>May 15, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

见识

见识:豆瓣地址 个人评分: 8.0 分 前辈用他的智慧和经验, 告诉我们如何更好地活着. 为什么读这本书 很多到了中年的人会有这样的体会: 自己无论多么努力,似乎都得不到社会的进一步认可;相反,如果按部就班地做事情,好像也坏不到哪里去。冥冥之中似乎被这两条线给框死,其实这就是命。 为了这一句话, 读这一本书. 自己的作为一个普工程序员, 在技术浪潮的最后端被拖着走. 本根不需要到中年, 今年是我从事程序员工作的第四年, 我已经被感受到了被"命"限制住 的感觉了. 书中讲了什么 作者分享了他对商业, 技术, 职业, 创业, 金钱, 读书的观点和看法 用提出了商业的本质是"消费"的观点, 剖析了现在主流的"共享经济", 带我们用商业的本质眼光, 去看哪些形式的共享经济是真正的"共享经济", 哪些只是噱头炒概念的而已. 分析了IOT, 和数字跟踪技术, 区块链, 众筹等. 介绍了新科技公司的创业过程中的一些普世经验. 如何选取赛道, 如何发挥自己小公司的优势, 如何在科技浪潮中存活下来, 以及中如何招聘优秀员工. 关于在职场如何招聘到优秀的员工, 又可以引申到自己如何成为一个优秀的员工, 作者也给出了答案. 树立完成的职业思维, 带着发展的目光选择岗位 在职业思维下主动和积极的面对工作 打开自己思维格局, 多去了解行业大局 有了不错的收入之后, 就涉及到了, 如何树立一个正确的金钱观. 要对自己收入有一个正确的认识, 避免过度追求提高收入, 进而牺牲了自己的健康, 家庭等. (现在经常听到我们的工友, 猝死就是这方面没有正确面对) 下半篇, 作者开始就上升到了人生态度问题. 以一个正确的心态, 面对生活, 面对婚姻, 面对死亡. 分清楚自己生活中的 “西瓜和芝麻”, 避免习惯于低层次的追求, 会影响我们的心志. 最后文中讲述对大学生的建议 (我已经错过了), 阐述沟通的重要性, 以及介绍了拉里·佩奇名人, 巴菲特的非凡"见识". 我从书中收获了什么 对现在的"共享经济"有了更深的认识, 对科技迭代有了一个基础性的认识, 重视自己职业发展和做文字的积累, 开始努力去全面了解自己的行业, 以及在阅读中莫名地增加了我对生活的信心. ...

<span title='2022-05-14 21:06:07 +0800 +0800'>May 14, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Show Your Work

Show Your Work 读书总结 概括 我为什么要读这本书 如何提高自己的影响力 这本书怎样影响了我 打算开始分享计划, 学习如何分享, 讲述故事. 计划"学术假" 书中的三句精华句子 You find time the same place you find spare change: in the nooks and crannies On the spectrum of creative work, the difference between the mediocre and the good is vast. Mediocrity is, however, still on the spectrum; you can move from mediocre to good in increments. The real gap is between doing nothing and doing something You can turn your flow into stock 三句话总结本书 ...

<span title='2022-04-30 17:22:23 +0800 +0800'>April 30, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Docker 基本使用

启动一个容器 打个样 1 docker run -itd --rm --name hello image_name – it 将当前的终端和容器内的终端连接在一起, 正式所谓的交互模式 –rm 当容器停止之后, 会自动删除改容器 外挂文件夹 参数 -v docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 与容器交互 进入容器 docker attach exec docker -it exec CONTAIN_NAME bash exex 会再目标容器内部执行一个命令, 命令名为 bash, 就是起一个 shell 咯. 加上 -it, 进入交互的终端模式 查看日志 docker logs CONTAINER 可以查看容器日志 -f 可以持续输出容器内部的最新日志 管理容器 启动 1 docker start CONTAINER 暂停 1 docker stop CONTAINER 提交 1 docker commit --author="ian" CONTAINER NEW-IMAGENAME:TAG 管理镜像 查看所有的镜像列表 ...

<span title='2022-04-07 13:34:55 +0800 +0800'>April 7, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Channel

Go 中 channel 中用法和实现总结 以下分析和源码都是基于 go1.17 版本 channel 简介 Go 语言的基础类型之一, 用于在协程与协程之间传递数据 (channel 数据的传输方式也是值传递, Go语言的数据传输只有值传递) Do not communicate by sharing memory; instead, share memory by communicating. channel 保证: 数据的先入先出 并发情况下的数据安全 已经关闭的 channel 不可重开 channel 的实现 channel 在内部实现的结构体为 runtime.hchan 有一个环形链表, 暂存要传输的数据. 无 buffer 的channel 该队列长度为0, 所以不进行数据缓冲. 有一把互斥锁mutex, 在并发情况下, 保护自身数据结构的一致性 有两个协程等待链表, 用于挂载因为发送/接收而阻塞在该 channel 上的协程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 type hchan struct { qcount uint // 当前 buffer 中有暂存着多少个数据 dataqsiz uint // 环形数组的buffer个数, 由 make 初始化的时候第二个参数容量决定的 buf unsafe.Pointer // 环形数组开始地址 elemsize uint16 // channel 传输的元素大小, 用于计算内存大小 closed uint32 // channel 是否已经关闭 0未关闭, 非0关闭 elemtype *_type // element type # channel 元素的类型 sendx uint // 环形链表中, 发送数据存储的下标 recvx uint // 环形链表中, 接受数据获取数据的下标 recvq waitq // 阻塞在该 channel 等待获取数据的 Groutine 列表 sendq waitq // 阻塞在该 channel 等待写入数据的 Groutine 列表 lock mutex // # 互斥锁 用于保护自身数据变更 } 初始化 channel 传递的元素不能太大 如果是空结构体或者无缓冲队列, 是不需要分配环形队列内存 如果传递数据类型有内含指针, 需要将环形队列分配到堆上 内部实现函数runtime.makechan ...

<span title='2022-04-02 10:09:22 +0800 +0800'>April 2, 2022</span>&nbsp;·&nbsp;11 min&nbsp;·&nbsp;潜水员

Go 常用的命令汇总

工具分类 go build 编译源代码文件 -race 编译出的目标程序,会启用数据竞争检测 go doc 查看包的文档(定义于doc.go的注释中), 于包中公开的函数签名 example 1 2 3 go doc go doc encoding/json go env 查看 go 相关的环境变量 1 2 3 4 5 # -w 设置环境变量 go env -w GOPAHT='/some/path' # -u 恢复成默认设置 go env -u GOPATH go generate 扫描文件中的指令并执行, 相关指令目的应该是“生成或者修改源文件” 注释的指令格式 //go:generate command argument... ps: wire 也是利用命令, 生成依赖注入文件 go get 管理当前module依赖 1 2 3 4 5 6 7 8 # 添加依赖包 go get example.com/pkg # 指定包版本 go get example.com/pkg@1.2.3 # 移除依赖 go get example.com/pkg@none go install 获取包文件,并编译和安装。可执行文件编译到$GOBIN路径下, 包文件编译到$GOPATH/pkg ...

<span title='2022-04-01 19:56:59 +0800 +0800'>April 1, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

Hugo 文章分类管理

Hugo 文章分类管理 文件夹 内容存放在content/目录下方, content/下方的子目录会形成资源URI, 例如 content/blog/doc.md 文章访问目录即为 https//XXX.github.io/blog.doc.md 分类管理 文章内容表述 (Front Matter) 使用进行分类, 默认只有tags 1 2 3 tags: - Go - fast 可以在config添加自定的分类选项 1 2 3 taxonomies: series: series category: categories 文章路径 类别 描述 地址 home 网站homepage /index.html page 指定页面 /post/页面/index.html section 分区 /section/index.html taxonomy 分类 /tags/index.html term 分类系列 /tags/go/index.html _index.md 和 index.md 在文件夹下方添加_index.md会识别成section. 在文件夹下方添加index.md会被识别成文章. 千万不要在默认的content目录下方添加index.md

<span title='2022-03-09 11:29:17 +0800 +0800'>March 9, 2022</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;潜水员

0 min&nbsp;·&nbsp;潜水员

进程, 线程, 协程 进程 进程一般由程序、数据集合和进程控制块三部分组成。 程序用于描述进程要完成的功能,是控制进程执行的指令集; 数据集合是程序在执行时所需要的数据和工作区; 程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。 进程是程序的实例,一个程序可以有多个实例,但一个实例只能对应一个进程 线程 线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。 一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。而进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成 任务调度 大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式。 多线程与多核 多核(心)处理器是指在一个处理器上集成多个运算核心从而提高计算能力,也就是有多个真正并行计算的处理核心,每一个处理核心对应一个内核线程。 内核线程(Kernel Thread,KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。一般一个处理核心对应一个内核线程,比如单核处理器对应一个内核线程,双核处理器对应两个内核线程,四核处理器对应四个内核线程。 超线程技术就是利用特殊的硬件指令,把一个物理芯片模拟成两个逻辑处理核心 程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口——轻量级进程(Lightweight Process,LWP),轻量级进程就是我们通常意义上所讲的线程,也被叫做用户线程。由于每个轻量级进程都由一个内核线程支持,因此只有先支持内核线程,才能有轻量级进程。 线程切换 线程切换的实现一般放在内核,中断处理程序也是放在内核。从这个角度来说,如果线程当前处于用户态,若要发生线程切换,必然是要先要先进入内核态,发生状态切换的。线程切换的原因还可能是其他类型的中断,或者线程自身主动进入等待或者睡眠,这些情况无一例外都是要进入内核的。 线程的切换分两种情况: 同进程内, 和不同进程内切换; 线程模型 一对一模型: 一个用户线程对应一个内核线程 CON 许多操作系统限制了内核线程的数量,因此一对一模型会使用户线程的数量受到限制; 许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降。 一对多模型: 多个用户线程对应一个内核线程 CON 如果其中一个用户线程阻塞,那么其它所有线程都将无法执行,因为此时内核线程也随之阻塞了; 在多处理器系统上,处理器数量的增加对多对一模型的线程性能不会有明显的增加 多对多模型: 多个用户线程对应一个内核线程 PRO 一个用户线程的阻塞不会导致所有线程的阻塞,因为此时还有别的内核线程被调度来执行; 多对多模型对用户线程的数量没有限制; 在多处理器的操作系统中,性能得到提升 协程 协程,英文Coroutines,是一种基于线程之上,但又比线程更加轻量级的存在,这种由程序员自己写程序来管理的轻量级线程叫做『用户空间线程』,具有对内核来说不可见的特性 因为是自主开辟的异步任务,所以很多人也更喜欢叫它们纤程(Fiber),或者绿色线程(GreenThread) 为什么使用协程 由于现代CPU发展的越来越快,每一个时间片能够处理的指令越来越多,很经常导致一个线程时间片还未用完,而进入了等待数据IO的时间。此时该线程必然要让出CPU,让另一个线程运行 之后有人提出了协程的概念,让同一个线程在一个CPU时间片内可以处理多个任务,虽然协程的切换也耗费时间,但总体来说要比线程的切换要好很多。因此,使用协程可以比使用线程能够得到更好的处理效果(这个不是一定的,还得跟服务器的任务性质以及协程的调度算法有关系,但一般情况下使用协程会比使用线程有更好的性能) 协程解决什么 协程的目的就是当出现长时间的I/O操作时,通过让出目前的协程调度,执行下一个任务的方式,来消除ContextSwitch上的开销。 避免CPU一直等待IO, 增加延迟 同时可以避免创建过多的线程, 造成更多上下文切换 进程 vs 线程 线程与进程最大的区别在于,线程是调度的基本单位,而进程则是资源拥有的基本单位。 所谓内核中的任务调度,实际上的调度对象是线程;而进程只是给线程提供了虚拟内存、全局变量等资源。 当进程只有一个线程时,可以认为进程就等于线程。 当进程拥有多个线程时,这些线程会共享相同的虚拟内存和全局变量等资源。这些资源在上下文切换时是不需要修改的。 另外,线程也有自己的私有数据,比如栈和寄存器等,这些在上下文切换时也是需要保存的 线程的上下文切换分成两种: 前后两个线程属于不同进程。此时,因为资源不共享,所以切换过程就跟进程上下文切换是一样 前后两个线程属于同一个进程。此时,因为虚拟内存是共享的,所以在切换时,虚拟内存这些资源就保持不动,只需要切换线程的私有数据、寄存器等不共享的数据 协程 vs 线程 items thread goroutine 资源占用 8M 2k 调度所属 OS 用户 切换开销 涉及模式切换、16个寄存器 PC/SP/DX 性能 创建和销毁开销大 小 数据同步 依赖锁 只有一个线程,不存在同时写变量冲突,在协程中控制共享资源不加锁 寄存器 ...

1 min&nbsp;·&nbsp;潜水员

什么是TCP TCP —— 用于保证可靠性和流控制机制的数据,包括 Socket、序列号以及窗口大小 The combination of this information, including sockets, sequence numbers, and window sizes, is called a connection. 为什么要三次握手 如果通信双方的通信次数只有两次,那么发送方一旦发出建立连接的请求之后它就没有办法 撤回这一次请求,如果在网络状况复杂或者较差的网络中,发送方连续发送多次建立连接的 请求,如果 TCP 建立连接只能通信两次,那么接收方只能选择接受或者拒绝发送方发起的请 求,它并不清楚这一次请求是不是由于网络拥堵而早早过期的连接。 所以,TCP 选择使用三次握手来建立连接并在连接引入了 RST 这一控制消息,接收方当收到 请求时会将发送方发来的 SEQ+1 发送给对方,这时由发送方来判断当前连接是否是历史连接: 如果当前连接是历史连接,即 SEQ 过期或者超时,那么发送方就会直接发送 RST 控制消息中止这一次连接; 如果当前连接不是历史连接,那么发送方就会发送 ACK 控制消息,通信双方就会成功建立连接; 使用三次握手和 RST 控制消息将是否建立连接的最终控制权交给了发送方,因为只有发送方 有足够的上下文来判断当前连接是否是错误的或者过期的,这也是 TCP 使用三次握手建立连 接的最主要原因。 初始序列号 获得一个用于发送信息的初始化序列号 TCP 连接的发起方可以通过保存发出的序列号判断连接是否过期,如果让接收方来保存并 判断序列号却是不现实的,这也再一次强化了我们在上一节中提出的观点 —— 避免历史错 连接的初始化。

1 min&nbsp;·&nbsp;潜水员

刚性泡沫(增订版)

《刚性泡沫(增订版):中国经济的增长和风险》 朱宁 137个笔记 愿赌不服输的购房者心态, 房子的快速增值,拉开了贫富差距,房价永不跌落形成了刚需心理 企业的大而不倒让政府兜底心态 股价国家队的兜底,只涨不跌禁止看空 点评 2024/03/11 认为好看 懂得了刚性兑付,隐性担保。为什么房地产已经如果被高估了和会有人继续购买,每一个参与击鼓传花的人都相信花会一直传递下去 2023 年版序言 2020年暴发的新冠肺炎疫情对于全球总需求和供应链带来的严重扰动,中国经济所面临的外部环境日益复杂,生产生活成本逐步上升,中国企业和居民家庭财务腾挪空间逐步缩小 2024/02/26 发表想法 杠杆够高,政府不得不救 原文:一是政府通过财政货币政策等各种不同方式提供的政府担保,会诱发市场经济参与者的道德风险(Moral Hazard)和策略行为,并导致参与者为了获取高额投资收益,而通过增加杠杆等方式进行激进的投资和投机,希望把本来自己应该面对的潜在投资风险转嫁给政府,从而保证自己不受损失和获得更高的投资收益 如果这种“愿赌而不服输”的心理不能得到有效纠正和调整,过度投机行为将会不可避免地导致泡沫的形成和最终的崩盘 刚性兑付,作为一种严重影响甚至扭曲预期和行为的重要手段,是中国进一步市场化改革过程中的一个重要挑战 2016 年版序言 但与此同时,债务之于债务人,永远是一把高悬于头顶的达摩克利斯之剑。还债义务的刚性,对企业现金流和资本结构的冲击,违约声誉风险和破产成本,都可能给一个国家的经济和金融稳定带来巨大的风险 政府推动短期经济增长用心良苦,虽然在短期达到了政策目标,但却在不经意间扭曲了全社会对于风险的判断和投资者的风险偏好,扭曲了投资收益和风险之间的平衡关系,以及资本这一重要生产要素的合理配置 为了能够让市场在资源配置中发挥决定性作用,化解刚性泡沫,政府需要逐渐退出对众多经济、金融、投资领域里的显性和隐性担保,让投资者和企业在享受投资收益的同时,也对自己投资决策所面临的风险负责 引言 “ 无可指摘 ” 的违约事件 事实无可辩驳,恶意可以攻击它,无知可以诋毁它,但归根结底,事实就是事实。 ——温斯顿·丘吉尔 购房者相信中国政府一定会保证他们的投资可以获得丰厚的收益,如果因为房价下跌而导致他们蒙受损失,他们一定不会善罢甘休 国内曾经多次发生购房者高价买房之后,因为开发商降价,而在售楼处进行示威,甚至劫持售楼人员、破坏售楼处的现象。因为这些房地产投资者清醒地知道政府不会对他们的抗议坐视不管,而一旦政府出面,开发商一定会给政府面子,给自己一个说法。 不会亏钱的购房者 为了加快销售,保证资金流的稳定和安全,很多房地产开发商都选择在房地产调控的时候采取积极的降价手段来吸引购房者 从某种程度上讲,房地产市场里的投资者和全球其他领域的投资者一样,其实都没有充分意识到自己所进行的投资背后所蕴含的风险,对自己的投资前景持有天真的、过分乐观的预期。 在某种意义上,这种维权行为等于把消费者自身的购房风险转移到了房地产开发商和政府身上。购房者因此可以不负责任、肆无忌惮地购买房产,进行房地产投资,而不必为这种投资可能带来的风险和损失负责。 恰恰是这种由政府和开发商所提供的刚性兑付, 证监会门前的抗议 2024/02/27 发表想法 股市的刚兑 原文:以美国证监会为例,其主要目的在于保证资本市场的秩序、公平和稳定。而除了这一全球各国证券监管部门的普遍职能,中国证监会还有一个重大的使命,那就是要促进中国资本市场的发展。 在这种政策使命的驱使下,很多中国投资者不相信中国政府,特别是中国证监会会容忍市场出现大规模下跌。因为股票下跌可能会造成投资者的重大损失,而这又有可能危害到社会的和谐稳定。由于中国政府对社会和谐稳定的高度重视,所以很多投资者认为,中国政府一定会保证股市上涨,而不会容忍股市下跌 其实,国际上的证券市场监管机构的职责只有一条,那就是保证市场上的信息披露公正、公平、公开。市场上所有的投资者都同样受到证券法的保护。任何额外保护投资者的意愿或者做法,都有可能扭曲整个资本市场对于风险的评判和定价 永不破产的公司 为什么中国的投资者不担心这些看起来债务问题非常严重的企业?为什么他们不担心自己的投资所面临的风险呢?答案恰恰又回到了本书讨论的隐性担保问题。因为中国投资者深信,这些企业是由中国政府通过中国的金融机构提供了隐性担保的,因此不可能面临违约甚至破产的风险。 产能过剩 很多企业家认为一旦自己的企业做大,那么地方政府一定会对自己的发展给予大力支持,并且当自己面临困境和挑战的时候,地方政府一定不会坐视不管。因为如果放任地方大企业破产,地方政府将会不得不面临地方经济滑坡和就业率下降的严重后果。正是基于这样的逻辑,很多企业在做投资决定时完全忽略了基本的金融原理和企业管理原则,而一味地扩大自己的资产和负债规模,希冀政府为自己不负责任的投资和决定买单 一定程度是由地方政府的GDP考核体系和中央政府推动经济增长的决心和目标决定的。所属辖区的经济发展速度一向是中国地方官员眼中的头等大事,因此通过借款投资推动当地经济短期内快速发展,成为很多地方官员相互之间传授的“锦囊妙计” 国有企业迷局 2024/02/27 发表想法 类比,企业的规模扩张但营收能力下降 原文:企业不断增长的债务和因为产能过剩所引发的不断恶化的企业盈利能力问题,这也是全球许多国家推动计划经济增长模式所面临的一个通病。 因为只有国有企业才能够从银行手里轻松地获得大量的低息贷款,所以很多国有企业可以通过向民营企业提供融资服务来获得丰厚的回报。这种给民营企业提供的贷款,有的时候可以带来年化利差高达10%左右的收益,远远超过了很多国有企业主营业务的盈利能力和利润水平 一切信用的根源:永远不会违约的政府 更令人担忧的是,持续开展的房地产调控政策,已经使地方政府的土地出让收入出现了明显下降 风险之间的高度相关 中国经济增长的速度直接决定了中国政府的财政可持续性和中国政府的信用评级 其次,中国地方政府财政收入的主要来源是地方的土地出让收入。随着中国房地产市场的滑坡,地方政府的财政压力甚至比中央政府更大 “ 不可能违约 ” 的贷款 不得参与所谓的资金池业务,也就是将客户产品资金汇聚在一起,然后再投资类似中诚信托发行的这种非标准化的资产和产品的做法 把新产品募集到的资金用于给老产品还债,这就是所谓的资金池业务。信托公司通过大力发展这种业务,找到了一种既能够迅速扩张规模又不至于引发违约风险的终南捷径。从某种意义上来讲,资金池业务的做法和所谓的庞氏骗局有类似之处 中国影子银行的根源:三个限制 ...

2 min&nbsp;·&nbsp;潜水员