朋友最近想学sem,sem到底做是什么的?

朋友最近想学sem,sem到底做是什么的?,第1张

Search Engine Marketing (SEM)搜索引擎营销-概述

搜索引擎营销(SEM)是一种使用出现在搜索引擎结果页面(或SERPs)的付费广告来营销业务的实践。广告商对百度/谷歌和必应等服务的用户在搜索特定产品或服务时可能输入的关键字进行竞价,这样广告商就有机会让他们的广告与这些搜索查询的结果一起出现。

这些广告通常被称为“点击付费广告”(pay-per-click ads),形式多种多样。有些是小的、基于文本的广告,而其他的,如产品列表广告(PLAs,也被称为购物广告)是更直观的、基于产品的广告,让消费者一眼就能看到重要的信息,如价格和评论。

搜索引擎营销最大的优势是,它为广告商提供了一个机会,让他们把广告放在那些有动机的顾客面前,他们准备购买的准确时刻。没有其他的广告媒体可以做到这一点,这就是为什么搜索引擎营销是如此有效和如此惊人的强大方式来增长你的业务。

搜索引擎营销SEM概述

 搜索引擎营销SEM和 搜索引擎优化 SEO

搜索引擎优化和搜索引擎优化有什么区别?

一般来说,“搜索引擎营销”或SEM指的是付费搜索营销,即企业支付百度/谷歌在搜索结果中显示广告的系统。

搜索引擎优化或SEO,不同之处是企业不支付百度/谷歌流量和点击相反,它们通过在给定的关键词搜索中提供最相关的内容,从而在搜索结果中获得免费位置。

SEO和SEM都应该是你在线营销策略的基本部分。SEO是一种强大的方法,可以让流量在烟囱顶部长青,而搜索引擎广告是一种非常划算的方法,可以让转化率在烟囱底部。

关键词:搜索引擎营销基础

关键词是搜索引擎营销的基础。当用户在搜索引擎中输入关键字(作为搜索查询的一部分)来寻找他们想要的东西时,关键字作为广告策略形成搜索引擎营销的基础,这一点也不奇怪。

SEM关键词研究

在您可以选择在搜索引擎营销活动中使用哪些关键字之前,您需要进行全面的研究,作为关键字管理策略的一部分。

首先,您需要确定与您的业务相关的关键字,以及潜在客户在搜索您的产品和服务时可能使用的关键字。实现这一点的一种方法是使用关键字工具。

希望以上的回答可以帮助您了解SEM的基础。

编程设计是北大青鸟软件开发专业学生最核心的技能之一。学校将学生喜爱的游戏与编程结合,组织趣味游戏编程大赛。让学生从打游戏的快乐感转移到制作游戏的成就感中来。

通过大赛,既实操了技术能力,又养成了团队协作的职业素养。

三种专门用于线程同步的机制:POSIX信号量,互斥量和条件变量.

在Linux上信号量API有两组,一组是System V IPC信号量,即PV操作,另外就是POSIX信号量,POSIX信号量的名字都是以sem_开头.

phshared参数指定信号量的类型,若其值为0,就表示这个信号量是当前进程的局部信号量,否则该信号量可以在多个进程之间共享.value值指定信号量的初始值,一般与下面的sem_wait函数相对应.

其中比较重要的函数sem_wait函数会以原子操作的方式将信号量的值减一,如果信号量的值为零,则sem_wait将会阻塞,信号量的值可以在sem_init函数中的value初始化sem_trywait函数是sem_wait的非阻塞版本sem_post函数将以原子的操作对信号量加一,当信号量的值大于0时,其他正在调用sem_wait等待信号量的线程将被唤醒.

这些函数成功时返回0,失败则返回-1并设置errno.

生产者消费者模型:

生产者对应一个信号量:sem_t producer

消费者对应一个信号量:sem_t customer

sem_init(&producer,2)----生产者拥有资源,可以工作

sem_init(&customer,0)----消费者没有资源,阻塞

在访问公共资源前对互斥量设置(加锁),确保同一时间只有一个线程访问数据,在访问完成后再释放(解锁)互斥量.

互斥锁的运行方式:串行访问共享资源

信号量的运行方式:并行访问共享资源

互斥量用pthread_mutex_t数据类型表示,在使用互斥量之前,必须使用pthread_mutex_init函数对它进行初始化,注意,使用完毕后需调用pthread_mutex_destroy.

pthread_mutex_init用于初始化互斥锁,mutexattr用于指定互斥锁的属性,若为NULL,则表示默认属性。除了用这个函数初始化互斥所外,还可以用如下方式初始化:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER。

pthread_mutex_destroy用于销毁互斥锁,以释放占用的内核资源,销毁一个已经加锁的互斥锁将导致不可预期的后果。

pthread_mutex_lock以原子操作给一个互斥锁加锁。如果目标互斥锁已经被加锁,则pthread_mutex_lock则被阻塞,直到该互斥锁占有者把它给解锁.

pthread_mutex_trylock和pthread_mutex_lock类似,不过它始终立即返回,而不论被操作的互斥锁是否加锁,是pthread_mutex_lock的非阻塞版本.当目标互斥锁未被加锁时,pthread_mutex_trylock进行加锁操作;否则将返回EBUSY错误码。注意:这里讨论的pthread_mutex_lock和pthread_mutex_trylock是针对普通锁而言的,对于其他类型的锁,这两个加锁函数会有不同的行为.

pthread_mutex_unlock以原子操作方式给一个互斥锁进行解锁操作。如果此时有其他线程正在等待这个互斥锁,则这些线程中的一个将获得它.

三个打印机轮流打印:

输出结果:

如果说互斥锁是用于同步线程对共享数据的访问的话,那么条件变量就是用于在线程之间同步共享数据的值.条件变量提供了一种线程之间通信的机制:当某个共享数据达到某个值时,唤醒等待这个共享数据的线程.

条件变量会在条件不满足的情况下阻塞线程.且条件变量和互斥量一起使用,允许线程以无竞争的方式等待特定的条件发生.

其中pthread_cond_broadcast函数以广播的形式唤醒所有等待目标条件变量的线程,pthread_cond_signal函数用于唤醒一个等待目标条件变量线程.但有时候我们可能需要唤醒一个固定的线程,可以通过间接的方法实现:定义一个能够唯一标识目标线程的全局变量,在唤醒等待条件变量的线程前先设置该变量为目标线程,然后采用广播的方式唤醒所有等待的线程,这些线程被唤醒之后都检查该变量以判断是否是自己.

采用条件变量+互斥锁实现生产者消费者模型:

运行结果:

阻塞队列+生产者消费者

运行结果:


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/123055.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-14
下一篇2023-03-14

发表评论

登录后才能评论

评论列表(0条)

    保存