国产一级片在线观看_女人18毛片a级毛片视频_老色鬼在线精品视频网站_日韩精品欧美大片资源在线观看网站_亚洲精品无码怕怕_亚州欧美综合另类_国产A级强奸黄片_成年中文字幕在线观看_这里只有精品久久_欧美人妻aⅴ中文字幕

07 2022.05

Linux下跨語言調(diào)用C++實(shí)踐

發(fā)布日期:2022-05-07 18:49:37
閱讀數(shù) 6810

文章轉(zhuǎn)載自GitHub中文社區(qū) 作者: 林陽 朱超 識瀚

1 背景

查詢理解(QU, Query Understanding)是美團(tuán)搜索的核心模塊,主要職責(zé)是理解用戶查詢,生成查詢意圖、成分、改寫等基礎(chǔ)信號,應(yīng)用于搜索的召回、排序、展示等多個環(huán)節(jié),對搜索基礎(chǔ)體驗(yàn)至關(guān)重要。該服務(wù)的線上主體程序基于C++語言開發(fā),服務(wù)中會加載大量的詞表數(shù)據(jù)、預(yù)估模型等,這些數(shù)據(jù)與模型的離線生產(chǎn)過程有很多文本解析能力需要與線上服務(wù)保持一致,從而保證效果層面的一致性,如文本歸一化、分詞等。

而這些離線生產(chǎn)過程通常用Python與Java實(shí)現(xiàn)。如果在線、離線用不同語言各自開發(fā)一份,則很難維持策略與效果上的統(tǒng)一。同時這些能力會有不斷的迭代,在這種動態(tài)場景下,不斷維護(hù)多語言版本的效果打平,給我們的日常迭代帶來了極大的成本。因此,我們嘗試通過跨語言調(diào)用動態(tài)鏈接庫的技術(shù)解決這個問題,即開發(fā)一次基于C++的so,通過不同語言的鏈接層封裝成不同語言的組件庫,并投入到對應(yīng)的生成過程。這種方案的優(yōu)勢非常明顯,主體的業(yè)務(wù)邏輯只需要開發(fā)一次,封裝層只需要極少量的代碼,主體業(yè)務(wù)迭代升級,其它語言幾乎不需要改動,只需要包含最新的動態(tài)鏈接庫,發(fā)布最新版本即可。同時C++作為更底層的語言,在很多場景下,它的計(jì)算效率更高,硬件資源利用率更高,也為我們帶來了一些性能上的優(yōu)勢。

本文對我們在實(shí)際生產(chǎn)中嘗試這一技術(shù)方案時,遇到的問題與一些實(shí)踐經(jīng)驗(yàn)做了完整的梳理,希望能為大家提供一些參考或幫助。

2 方案概述

為了達(dá)到業(yè)務(wù)方開箱即用的目的,綜合考慮C++、Python、Java用戶的使用習(xí)慣,我們設(shè)計(jì)了如下的協(xié)作結(jié)構(gòu):

圖 1

圖 1

3 實(shí)現(xiàn)詳情

Python、Java支持調(diào)用C接口,但不支持調(diào)用C++接口,因此對于C++語言實(shí)現(xiàn)的接口,必須轉(zhuǎn)換為C語言實(shí)現(xiàn)。為了不修改原始C++代碼,在C++接口上層用C語言進(jìn)行一次封裝,這部分代碼通常被稱為“膠水代碼”(Glue Code)。具體方案如下圖所示:

圖 2

圖 2


在線咨詢 熱線咨詢 微信咨詢 返回頂部
聯(lián)系項(xiàng)目經(jīng)理
獲取解決方案、項(xiàng)目報(bào)價
項(xiàng)目需求
聯(lián)系方式
您的姓名

聯(lián)系電話:

13528173451

立即咨詢