前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go的PCRE包装在启用JIT的时候遇到的问题和解决方案

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

作者头像
Linker
发布于 2018-04-13 08:18:27
发布于 2018-04-13 08:18:27
9220
举报

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

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

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

解决方案有两个:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go与C的桥梁:CGO入门剖析与实践
作者:panhuili,腾讯 IEG 后台开发工程师 Go 作为当下最火的开发语言之一,它的优势不必多说。Go 对于高并发的支持,使得它可以很方便的作为独立模块嵌入业务系统。有鉴于我司大量的 C/C++存量代码,如何 将 Go 和 C/C++进行打通就尤为重要。Golang 自带的 CGO 可以支持与 C 语言接口的互通。本文首先介绍了 cgo 的常见用法,然后根据底层代码分析其实现机制,最后在特定场景下进行 cgo 实践。 一、CGO 快速入门 1.1、启用 CGO 特性 在 golang 代码中加
腾讯技术工程官方号
2021/02/07
6.8K0
用golang开发系统软件的一些细节
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 ---- (本文的pdf版本: https://files
ahfuzhang
2022/11/07
1.5K0
Go内存模型
Go语言中内存分配大致有3种模式:Stack、Heap、Fixed Size Segment。
叫你不戴帽子
2018/10/27
2.5K0
Go内存模型
【百面成神】JVM基础12问,你能坚持到第几问
脚本慢:程序流程图,加log计时 发现特别慢的时间结点,看代码逻辑,从逻辑上不可能有特别耗时的操作。 考虑是垃圾回收操作。 使用JVisaulVM进行排查,发现是在做垃圾回收。 堆做dump,定位到代码。 有几个地方。 第一个地方是,生成报告的结点是循环依赖的。A、B互相持有,由于JVM的回收机制是根可达算法,会堆积到老年代回收。设置clear()予以解决。 第二个是将缓存变量由类的实例改称了类。 第三个是将concurrentHashMap改为synchornized和WeakHashMap
半旧518
2023/10/17
2120
JNI开发中,你需要知道的一些建议
JNI全称Java Native Interface。它为Java与本C/C++之间提供了一种交互方式。
望天
2019/05/26
1.6K0
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出。简单来说,就是你的Java应用想要的内存超过了JVM愿意给的极限,就会抛出这个错误。
程序员江小北
2024/02/24
8810
美团面试:说说OOM三大场景和解决方案? (绝对史上最全)
【玩转 Cloud Studio】Android 中关于 OOM 的那些事
Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory 。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量的对象无法被释放)导致的 OOM,或者说是需要的内存大小大于可分配的内存大小,例如加载一张非常大的图片,就可能出现 OOM。
345
2023/05/25
1.1K1
【玩转 Cloud Studio】Android 中关于 OOM 的那些事
Android跨进程通信IPC之2——Bionic
Bionic库是Android的基础库之一,也是连接Android系统和Linux系统内核的桥梁,Bionic中包含了很多基本的功能模块,这些功能模块基本上都是源于Linux,但是就像青出于蓝而胜于蓝,它和Linux还是有一些不一样的的地方。同时,为了更好的服务Android,Bionic中也增加了一些新的模块,由于本次的主题是Androdi的跨进程通信,所以了解Bionic对我们更好的学习Android的跨进行通信还是很有帮助的。
隔壁老李头
2018/08/30
1.7K0
Android | 关于 OOM 的那些事
Android 系统对每个app都会有一个最大的内存限制,如果超出这个限制,就会抛出 OOM,也就是Out Of Memory 。本质上是抛出的一个异常,一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量的对象无法被释放)导致的 OOM,或者说是需要的内存大小大于可分配的内存大小,例如加载一张非常大的图片,就可能出现 OOM。
345
2023/05/26
1.7K0
Android | 关于 OOM 的那些事
Go程序GC优化
大部分精力都投入在做cpuprof和memprof找性能瓶颈和内存泄漏上,没有关注过Go的GC运行情况。
golangLeetcode
2022/08/02
4090
「音视频直播技术」JNI编程常见问题
本文是JNI编程注意事项的第二篇文章。在上篇中讲解了 JavaVM/JNIEnv, Threads, jclass/jfieldID/jmethodID 以及 Local/Global 引用。今天我们继续讲解余下的部分。
音视频_李超
2020/04/02
1.7K0
golang源码分析(8):m、p、g、shedt、sudog
go的调度器只要实现在 runtime 包中,路径为: ./src/runtime/proc.go 文件中。
golangLeetcode
2022/08/02
1.2K0
选择“网红语言”值不值?使用Go和Rust的数据库公司七年经验总结
作者 | 赵钰莹   “我现在会很辩证地看待这件事情,只能说是不好不坏,但当时所谓的主流选择可能会让我们的产品变成一个平庸的系统。” 即便是在此时此刻创业的公司,公司的产品决定全部采用 Go 和 Rust 也是非常艰难的决定,更何况是七年前 2015 到 2016 年,Go 不到五岁,Rust 还没发布 v1.0 版本,没有太多公司和开发者看好这两种语言,怎么会有公司选择全面采用这两种语言,还是用来写数据库和存储层代码? 如果你在七八年前听到这个故事,直觉大概是这家公司活不了太久。事实上,这家公司不仅走过
深度学习与Python
2023/03/29
6570
选择“网红语言”值不值?使用Go和Rust的数据库公司七年经验总结
万字长文带你深入浅出 Golang Runtime
本文作者:yifhao,腾讯PCG NOW直播 后台工程师 介绍 本文基于 2019.02 发布的 go 1.12 linux amd64 版本, 主要介绍了 Runtime 实现的一点原理和细节, 对大家容易错或者网络上很多错误的地方做一些梳理: Golang Runtime 是个什么 Golang Runtime 的发展历程, 每个版本的改进 Go 调度: 协程结构体, 上下文切换, 调度队列, 大致调度流程, 同步执行流又不阻塞线程的网络实现等 Go 内存: 内存结构, mspan 结构, 全
腾讯技术工程官方号
2019/12/03
2.5K0
万字长文带你深入浅出 Golang Runtime
pthreads php 安装全过程[通俗易懂]
pthreads 是一组允许用户在 PHP 中使用多线程技术的面向对象的 API。 它提供了创建多线程应用所需的全套工具。 通过使用 Thread, Worker 以及 Threaded 对象,PHP 应用可以创建、读取、写入以及执行多线程应用,并可以在多个线程之间进行同步控制。
全栈程序员站长
2022/07/18
1.2K0
pthreads php 安装全过程[通俗易懂]
备战大厂,彻底搞懂垃圾回收机制底层原理
通过前面的学习我们知道,当一个网页运行时,浏览器会给网页分配一段连续的内存空间以供网页使用。
用户6901603
2022/04/11
9680
备战大厂,彻底搞懂垃圾回收机制底层原理
《面试季》经典面试题-JVM篇(一)
前言 大家好,这里是IT学习日记,相信大家对今年IT的行情应该也有所了解了,从大厂到小厂,各种裁员消息。公司裁员我们无法决定,我们能做的就是不断提升自己,提前准备。 本系列文章主要分享了之前博主真实面试中遇到的一些问题,希望能够帮助准备就业或者跳槽的朋友。 起因 面试官: 嗯、谈谈你对JVM、JRE、JDK的认识吧。 我: (心里想)小样,就这问题,想难倒资深CURD工程师,还好我早有准备。回答道:JVM全称JAVA虚拟机,它可用于加载JAVA字节码文件,可以看做是JAVA的一个执行环境,JAV
IT学习日记
2022/09/13
2110
《面试季》经典面试题-JVM篇(一)
C++11『lambda表达式 ‖ 线程库 ‖ 包装器』
自从C++98以来,C++11无疑是一个相当成功的版本更新。它引入了许多重要的语言特性和标准库增强,为C++编程带来了重大的改进和便利。C++11的发布标志着C++语言的现代化和进步,为程序员提供了更多工具和选项来编写高效、可维护和现代的代码
北 海
2023/11/24
5860
C++11『lambda表达式 ‖ 线程库 ‖ 包装器』
RustCon Asia 实录 | Rust 在国内某视频网站的应用
hawkingrei(王维真),中间件高级开发工程师,开源爱好者,TiDB & TiKV Contributor。
PingCAP
2019/06/04
1.1K0
听GPT 讲Go源代码--proc.go(1)
proc.go是Go语言runtime(运行时)的核心文件之一,它主要负责实现Go程序在操作系统上的进程管理和调度。
fliter
2023/06/18
4270
听GPT 讲Go源代码--proc.go(1)
推荐阅读
相关推荐
Go与C的桥梁:CGO入门剖析与实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档