专栏首页高性能分布式系统设计Go的PCRE包装在启用JIT的时候遇到的问题和解决方案

Go的PCRE包装在启用JIT的时候遇到的问题和解决方案

用CGO包装C的库, 如果启用了JIT的话,会有一些问题.

例如pcre用了JIT动态生成代码并JIT代码引用里自己线程的JIT Stack数据.

这时会有一个问题, JIT代码的线程并不会刚好是后续Goroutine执行的线程, 当这件事发生的时候, 内存异常不可能避免.

解决方案有两个:

1. 针对每个库特别的优化, 把JIT引用的数据复制到Go的堆中,并修改指针; 例如这个Commit;

2. 使用 go 的pthread包装,在 pthread中使用 该C库;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL大结果集分次取回,不耗费大内存的lazy计算的方法

    Python导数据的时候,需要在一个大表上读取很大的结果集。 如果用传统的方法,Python的内存会爆掉。因为无论是fetchone()还是fetchal...

    Linker
  • Jython设置默认编码

    Jython项目对非ascii编码的支持不是很好,尤其是在windows环境。 但是需要用Jython做一些和Java配合的工作,又必须要能够在Windo...

    Linker
  • Base58编码简介

    Base64是很多人熟知的一种编码。 在URL传输领域,还有类似的Base32编码。这个编码去掉了一些特殊字符,只留下了大写字母和数字。 本文要讨论的是Base...

    Linker
  • 使用GitLabCI实现monorepos项目CI/CD

    基于现代Web的应用程序通常都包含多种服务。例如,后端API和前端客户端。在规模扩大成为问题的大型项目中,服务也可以拆分为多个微服务。如何在这样的项目中组织源代...

    泽阳
  • Windows 7与Windows XP双系统安装方法汇总

    用户1127987
  • Go语言中的管道(Channel)总结

    管道(Channel)是Go语言中比较重要的部分,经常在Go中的并发中使用。今天尝试对Go语言的管道来做以下总结。总结的形式采用问答式的方法,让答案更有目的性。...

    李海彬
  • 网络工程师入门系列 | 虚拟路由冗余协议VRRP

    建设企业网络的主要目的是最终用户可以访问其数据与服务,网络中的用户端通常采用一个默认网关的形似访问外部网络。如果默认网关设备发生故障,将中断所有用户终端...

    网络技术联盟站
  • ELK日志分析方案

    1.在微服务服务器上部署Logstash,作为Shipper的角色,对微服务日志文件数据进行数据采集,将采集到的数据输出到Redis消息队列。

    IT技术小咖
  • Centos系统备份与恢复教程

    2018年11月19日 16:55:04 爱我所爱bravefly 阅读数 1369更多

    拓荒者
  • 各个程序语言对应的薪资是多少?美国编程语言薪资排行一览

    需求情况 根据你熟悉的编程语言找到工作的可能性有多大?以下是来自美国机构的工作趋势: ? 可以看到,C,SQL,Java 和 JavaScript 在招聘启事中...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券