当前位置: 首页 > news >正文

浙江义乌疫情最新消息全国分站seo

浙江义乌疫情最新消息,全国分站seo,上海网页制作设计,网店装修素材在只有mojo的情况下, 进程间通信都是靠unix 域套接字来完成了,由于这种方式比较低效,并且不够灵活,后来引入了ipcz。 但是系统中基本上使用mojo做进程间通信,想要一步到位迁移到ipcz系统是比较困难的。 所以chrome团队…

在只有mojo的情况下, 进程间通信都是靠unix 域套接字来完成了,由于这种方式比较低效,并且不够灵活,后来引入了ipcz。 但是系统中基本上使用mojo做进程间通信,想要一步到位迁移到ipcz系统是比较困难的。 所以chrome团队采用了一种折中的方法,利用原来mojo的channel进行socket通信,作为控制消息和唤醒机制。 使用ipcz 来实现共享内存和路由机制。另外由于chrome是一个面向多操作系统的任务,对于不同操作系统使用不同的代码实现,这样就要求抽取出操作系统相关的实现。这样使得现有代码非常混乱。另外ipcz系统希望减少耦合,尽量少的暴露实现细节,以及方便序列化,使用handle(句柄)代理不同层的对象。

ipcz主要有四个模块:
1、ipcz上层:third_party/ipcz 目录。 handle 为IpczHandle。 实现Node、NodeLink、RouterLink、Portal、NodeConnector、Router、Parcle 等对象。架空mojo的Node 和Port
2、ipcz driver层:mojo/core/ipcz_driver目录。handle 为 IpczDriverHandle。 实现Transport,ipcz层和mojo层的粘合剂,利用mojo层的通信能力服务ipcz层。序列化传输能力。
3、mojo 层:mojo/core目录。handle 为 MojoHandle。 实现Channel,进程间通信能力。
4、Platform层/mojo/public/cpp/platform目录。 handle 为PlatformHandle。 系统层面的实现,主要是对Socket文件描述的包装。

下面我们具体分析一下每一层handle的实现。

ipcz 层 IpczHandle实现

third_party/ipcz/src/ipcz/api_object.h

class APIObject : public RefCounted {public:enum ObjectType {kNode,kPortal,kBox,kTransport,kParcel,};static APIObject* FromHandle(IpczHandle handle) {return reinterpret_cast<APIObject*>(static_cast<uintptr_t>(handle));}// Takes ownership of an APIObject from an existing `handle`.static Ref<APIObject> TakeFromHandle(IpczHandle handle) {return AdoptRef(reinterpret_cast<APIObject*>(static_cast<uintptr_t>(handle)));}// Returns an IpczHandle which can be used to reference this object. The// reference is not owned by the caller.IpczHandle handle() const { return reinterpret_cast<uintptr_t>(this); }// Releases ownership of a Ref<APIObject> to produce a new IpczHandle which// implicilty owns the released reference.static IpczHandle ReleaseAsHandle(Ref<APIObject> object) {return static_cast<IpczHandle>(reinterpret_cast<uintptr_t>(object.release()));}
......  
}

ipcz层对应的对象基类为APIObject,APIObject 提供四个方法,FromHandle() 和 TakeFromHandle() 方法用于将IpczHandle() 转化为具体对象。handle() 和 ReleaseAsHandle() 方法用于将对象转成IpczHandle句柄。这里我们还可以看到系统里有5种类型的APIObject,分别是:

  • kNode 代表IPCZ Node(节点)对象
  • kPortal 代表ipcz Portal(端口)对象
  • kBox 用于其他可传输的ipcz对象
  • kTransport 代表ipcz Transport(传输点)对象
  • kParcel 代表ipcz Parcel(消息)对象

ipcz driver 层 IpczDriverHandle实现

typedef uintptr_t IpczDriverHandle;

mojo/core/ipcz_driver/object.h

// Common base class for objects managed by Mojo's ipcz driver.
class MOJO_SYSTEM_IMPL_EXPORT ObjectBase: public base::RefCountedThreadSafe<ObjectBase> {public:REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE();enum Type : uint32_t {// An ipcz transport endpoint.kTransport,// A wrapped shared memory region.kSharedBuffer,// An active mapping for a shared memory region. These objects are not// serializable and cannot be transmitted over a Transport.kSharedBufferMapping,// A PlatformHandle which can be transmitted as-is by the platform's Channel// implementation, out-of-band from message data. This is the only type of// driver object which can be emitted by the driver's Serialize(), and it's// the only type accepted by its Transmit(). This type is unused on Windows,// where all platform handles are encoded as inline message data during// serialization.kTransmissiblePlatformHandle,// A PlatformHandle which may or may not be transmissible by the platform's// Channel implementation, but which can at least be transformed into// something transmissible during serialization.kWrappedPlatformHandle,// A DataPipe instance used to emulate Mojo data pipes over ipcz portals.kDataPipe,// A MojoTrap instance used to emulate a Mojo trap. These objects are not// serializable and cannot be transmitted over a Transport.kMojoTrap,// An Invitation instance used to emulate Mojo process invitations. These// objects are not serializable and cannot be transmitted over a Transport.kInvitation,};explicit ObjectBase(Type type);Type type() const { return type_; }IpczDriverHandle handle() const {return reinterpret_cast<IpczDriverHandle>(this);}static ObjectBase* FromHandle(IpczDriverHandle handle) {return reinterpret_cast<ObjectBase*>(handle);}static IpczDriverHandle ReleaseAsHandle(scoped_refptr<ObjectBase> object) {return reinterpret_cast<IpczDriverHandle>(object.release());}static scoped_refptr<ObjectBase> TakeFromHandle(IpczDriverHandle handle) {scoped_refptr<ObjectBase> object(FromHandle(handle));if (object) {// We're inheriting a ref previously owned by `handle`, so drop the extra// ref we just added.object->Release();}return object;}......
// Computes the number of bytes and platform handles required to serialize// this object for transmission through `transmitter`. Returns false if the// object cannot be serialized or transmitted as such.virtual bool GetSerializedDimensions(Transport& transmitter,size_t& num_bytes,size_t& num_handles);// Attempts to serialize this object into `data` and `handles` which are// already sufficiently sized according to GetSerializedDimensions(). Returns// false if serialization fails.virtual bool Serialize(Transport& transmitter,base::span<uint8_t> data,base::span<PlatformHandle> handles);

ipcz driver层对应的对象基类为ObjectBase,ObjectBase 提供的方法包括: type方法返回对象的类型,FromHandle() 和 TakeFromHandle() 方法用于将IpczHandle() 转化为具体对象。handle() 和 ReleaseAsHandle() 方法用于将对象转成IpczHandle句柄。GetSerializedDimensions方法用来序列化过程中返回需要的内存空间和hanlde空间。 Serialize函数用于跨进程序列化传输。

这里我们还可以看到系统里有8种类型的ObjectBase,分别是:

  • kTransport 代表传输点对象
  • kSharedBuffer 代表共享内存(端口)对象
  • kSharedBufferMapping 映射后的共享内存对象
  • kTransmissiblePlatformHandle 可传输的PlatformHandle对象
  • kWrappedPlatformHandle 包装的PlatformHandle对象
  • kDataPipe 数据管道
  • kMojoTrap Trap监听对象
  • kInvitation 链接邀请对象。

Mojo层 MojoHandle实现

typedef uintptr_t MojoHandle;

mojo层名没有对应的对象。可以和ipcz driver handle 和 ipcz handle强转。

Platform层 PlatformHandle实现

class COMPONENT_EXPORT(MOJO_CPP_PLATFORM) PlatformHandle {public:enum class Type {kNone,
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_FUCHSIA)kHandle,
#elif BUILDFLAG(IS_APPLE)kMachSend,kMachReceive,
#endif
#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)kFd,
#endif};private:Type type_ = Type::kNone;#if BUILDFLAG(IS_WIN)base::win::ScopedHandle handle_;
#elif BUILDFLAG(IS_FUCHSIA)zx::handle handle_;
#elif BUILDFLAG(IS_APPLE)base::mac::ScopedMachSendRight mach_send_;base::mac::ScopedMachReceiveRight mach_receive_;
#endif#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA)base::ScopedFD fd_;
#endif
};

对于linux系统, type为kFd, fd_变量保存文件描述符。

http://www.wangmingla.cn/news/71136.html

相关文章:

  • 值得关注的网站必应搜索引擎国际版
  • 网站建设 资质荣誉线上营销推广方法
  • 做网站费用会计分录怎么做点击seo软件
  • 做视频小网站犯法吗什么是电商?电商怎么做
  • 网站友情链接的作用优化服务公司
  • 怎样做关于自己的网站泉州关键词搜索排名
  • 网站title的作用个人网站模板
  • 英文网站的首页怎么做珠海网站设计
  • 网站后台管理是什么万网域名官网
  • 做商城网站要请程序员吗整合营销的特点有哪些
  • 学做网站制作平台接广告在哪里接的
  • 福建省人民政府地址福州网seo
  • wordpress标题省略宁波seo推广如何收费
  • 怎么优化网站程序线上营销渠道主要有哪些
  • 崇信县门户网站留言首页百度图片搜索图片识别
  • 网站如何做信息表网络推广和网站推广平台
  • 长春火车站在哪个街道seo常用优化技巧
  • 水墨风格网站小程序自助搭建平台
  • 资溪做面包招聘的网站谷歌优化的最佳方案
  • 外贸手机网站全国最新疫情最新消息
  • 做淘宝客网站需要多大空间如何用网站模板建站
  • 网站架构教程站内推广和站外推广的区别
  • 公司做网站的费用属于什么费用百度百度推广
  • 青岛专业餐饮网站制作校园推广的方式有哪些
  • js搜索网站开发qq营销软件
  • 肇庆做网站的有shodan搜索引擎
  • 如何用php做网站管理系统seo怎么收费
  • 西安知名网站建设公司友情链接的作用大不大
  • 精选聊城做网站的公司学生个人网页制作代码
  • wpf做网站网站优化推广培训